写入数据时 std::ofstream 中的错误处理
Error handling in std::ofstream while writing data
我有一个小程序,我在其中初始化一个字符串并写入文件流:
#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< 失败了。
提前致谢。
原则上如果出现写入错误,应该设置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:这是标准程序。 return 代码为 0 的程序
(或EXIT_SUCCESS
)当出现写入错误时不正确。
我找到了类似
的解决方案
#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.bad()) //bad() function will check for badbit
{
cout<<"Writing to file failed"<<endl;
}
return 0;
}
我有一个小程序,我在其中初始化一个字符串并写入文件流:
#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< 失败了。
提前致谢。
原则上如果出现写入错误,应该设置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:这是标准程序。 return 代码为 0 的程序
(或EXIT_SUCCESS
)当出现写入错误时不正确。
我找到了类似
的解决方案#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.bad()) //bad() function will check for badbit
{
cout<<"Writing to file failed"<<endl;
}
return 0;
}