如何使用 C++ 检查二进制文件是否成功写入?

问题描述 投票:0回答:1

我见过这两种检查二进制文件写入是否成功的方法:

if (!file.write(reinterpret_cast<char*>(&variablle), sizeof(variable)))
{
    return false;
}

if(!file.good()) {
    cout << "Error occurred at writing time!" << endl;
    return false;
}

但是,我不确定这是否可以,或者无论如何检查它的好方法是什么?

c++ binary binaryfiles fstream
1个回答
0
投票

在这一行中:

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.
 }
© www.soinside.com 2019 - 2024. All rights reserved.