【发布时间】:2015-02-05 11:23:10
【问题描述】:
我有一个小程序,我在其中初始化一个字符串并写入文件流:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
std::ofstream ofs(file.c_str());
string s="Hello how are you";
if(ofs)
ofs<<s;
if(!ofs)
{
cout<<"Writing to file failed"<<endl;
}
return 0;
}
我的磁盘空间非常少,“ofs”语句失败。所以我知道这在逻辑上是一个错误。
语句 "if(!ofs)" 没有遇到上述问题,因此我无法知道它失败的原因。
请告诉我,通过哪些其他选项我可以知道 "ofs 失败了。
提前致谢。
【问题讨论】:
-
在尝试
ofs <<之前,您是否检查过ofstream是否实际上已打开? -
ofstream::operator<<如果失败,将修改内部状态标志。你查过ofstream::eof/bad/fail吗? -
@zenith:如果无法打开文件,内部状态标志将会改变。你能在写作时确认它是否也失败了吗?如果可能,请您出示一些代码。
-
检查返回值部分here。这能回答你的问题吗?
-
@zenith
ofstream::operator<<在尝试写入数据时如果出现写入错误将失败。由于缓冲,这通常不会发生在失败的输出操作上。 通常,在close之后验证ofstream的状态就足够了(当保证所有数据都被刷新时);如果需要及时检查,则必须先刷新流。