【发布时间】:2018-03-30 00:55:36
【问题描述】:
我的程序让用户指定写入文件的位置。如果他们指定“C:\output.txt”,则文件操作似乎成功(没有错误),但不会创建文件。我知道这是由于 Windows 需要提升权限,并且在以管理员身份运行时它确实写入 C:\。我的问题是如何检测文件实际上没有打开?
即使文件实际上并未创建,此块“成功”且没有错误:
ofstream ofs;
try {
ofs.open(outputFile);
if (!ofs.is_open()){
throw "The file could not be opened";
}
ofs << "it worked";
ofs.close();
} catch (const char* ex){
cout << ex;
return 1;
}
【问题讨论】:
-
如果您没有创建文件的权限,
is_open()应该返回 false。 -
你确定,文件没有被创建并且仍然让 is_open 变为真吗?试试这个: if ( (ofs.rdstate() & std::ofstream::failbit ) != 0 ) 而不是 ofs.is_open。如果您找到正确的解决方案,请更新。
-
尝试在文件名中使用正斜杠,例如“C:/outfile.txt”