我正在尝试在尝试打开文件后创建一个文件,如果它不存在的话。
我想在不使用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
}
上面的代码似乎工作得很好,但我只想对任何其他建议,其他建议或实现相同目标的替代方法持开放态度。谢谢!
答案 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;
}