如果文件不存在,如何创建文件?

时间:2014-04-04 03:59:57

标签: c++11 fstream

我正在尝试在尝试打开文件后创建一个文件,如果它不存在的话。 我想在不使用ios::app的情况下这样做,因为有了这个,我以后将无法使用搜索功能。

我的包括:

#include <string>
#include <errno.h>
#include <fstream>
#inlcude <iostream>
using namespace std;

我的主要人物:

string str;
cout << "Enter a string: " << endl;
cin >> str;
fstream fstr;
fstr.open("test.txt", ios::in | ios::out | ios::binary | ios::ate );
if (fstr.fail()) {
    cerr << strerror(errno) << endl;
    fstr.open("test.txt", ios::out);
    fstr.close();
    fstr.open("test.txt", ios::in | ios::out | ios::binary | ios::ate );
} // if file does not exist, create by using "ios::out",close it, then re-open for my purpose

if (fstr.is_open()) { // if the file opens/exists
    fstr << str << endl; // str goes into fstr
    fstr.close(); // close
}

上面的代码似乎工作得很好,但我只想对任何其他建议,其他建议或实现相同目标的替代方法持开放态度。谢谢!

1 个答案:

答案 0 :(得分:0)

作为替代方案,您可以使用 stat()函数,该函数可在基于Unix的系统和Windows上使用。然后你可以编写一个非常简单的函数来测试文件名是否存在并命名文件:

#include <sys/stat.h>

bool FileExistAndIsFile(const std::string & filePath)
{
    int result;
    struct stat statBuf;

    result = stat(filePath.c_str(), &statBuf);
    return ((result == 0) && S_ISREG(statBuf.st_mode)) ? true : false;
}