我有一个小程序,我初始化一个字符串并写入文件流:
#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;
}
我的磁盘空间非常少,声明&#34; ofs&lt; &#34;失败。所以我知道这在逻辑上是错误的。
声明&#34; if(!ofs)&#34; 没有遇到上述问题,因此我无法知道原因它失败了。
请告诉我,通过哪些其他选项我可以知道&#34; ofs&lt; 已失败。
提前致谢。
答案 0 :(得分:16)
原则上,如果存在写入错误,则应设置badbit
。该
错误只会在流实际尝试写入时设置,但是,
因此,由于缓冲,它可以在稍后的写入时设置,而不是在发生错误时,甚至在之后
关。这个位是“粘性的”,所以一旦设置,它就会停留
集。
鉴于上述情况,通常的程序是只验证其状态
关闭后输出;在输出到std::cout
或std::cerr
之后
最后的同花顺。类似的东西:
std::ofstream f(...);
// all sorts of output (usually to the `std::ostream&` in a
// function).
f.close();
if ( ! f ) {
// Error handling. Most important, do _not_ return 0 from
// main, but EXIT_FAILUREl.
}
输出到std::cout
时,请将f.close()
替换为
std::cout.flush()
(当然还有if ( ! std::cout )
)。
AND:这是标准程序。一个返回码为0的程序
(或EXIT_SUCCESS
)当写入错误不正确时。
答案 1 :(得分:5)