我见过这两种检查二进制文件写入是否成功的方法:
if (!file.write(reinterpret_cast<char*>(&variablle), sizeof(variable)))
{
return false;
}
和
if(!file.good()) {
cout << "Error occurred at writing time!" << endl;
return false;
}
但是,我不确定这是否可以,或者无论如何检查它的好方法是什么?
在这一行中:
if (!file.write(reinterpret_cast<char*>(&variablle), sizeof(variable))) { return false; }
write()
方法的结果返回对流(文件)的引用。然后,您将 operator !
应用于文件对象,如果已在对象上设置了 true
或 failbit
,则返回布尔值 badbit
。
这条线:
if(!file.good()) { cout << "Error occurred at writing time!" << endl; return false; }
在对象
good()
上调用方法 file
,它返回一个布尔值,该值立即用 !
否定。如果设置了任何标志 failbit
、badbit
或 eofbit
,则表达式的结果为真。
因此行为略有不同,因为第一个版本不检查
eofbit
。但实际上他们在做同样的事情。
解决一些评论。
这意味着你已经成功写入c++流对象。此时它可能已刷新到物理磁盘,也可能未刷新到物理磁盘,因为 write() 调用和磁盘之间存在缓冲。
您可能会使用
flush()
来确保数据已与输出序列同步。
大多数应用程序不会费心去做这个级别的检查(但这取决于应用程序)。
总结:
通常使用第一个版本来检查
write()
是否成功就足够了
if (!file.write(/* Stuff */)) {
// the write failed.
// Do something that indicates failure.
}
如果你想通知用户成功/失败,你通常不会在每次写操作时都这样做。我会在最后做一个检查(当所有的写作都完成时)。
if (!file.good()) {
// Tell the user something went wrong.
}