【发布时间】:2013-05-17 03:14:53
【问题描述】:
在我的 C++ 代码中,我不断将不同的值写入文件。我的问题是,考虑到文件已成功打开的事实,如果在任何情况下 write 或
【问题讨论】:
-
硬盘坏了怎么办?
-
这是我唯一能想到的。
在我的 C++ 代码中,我不断将不同的值写入文件。我的问题是,考虑到文件已成功打开的事实,如果在任何情况下 write 或
【问题讨论】:
失败的原因太多了,无法一一列举。可能的有:
我是否需要检查每一个 write 或
如果您希望您的程序能够适应故障,那么,绝对是,是的。如果你不这样做,它只是意味着你正在写入的数据可能会或可能不会被写入,这等于说你不关心它。
注意:您可以根据自己的喜好设置std::ostream::exceptions,而不是在每次操作后检查流状态(这很快就会变得非常乏味),这样流在失败时会抛出异常(这应该不是问题,因为根据定义,此类磁盘故障是非常特殊的)。
【讨论】:
写入失败的原因有很多。以下是我脑海中的一些:
等等。
编辑:我知道您说过您正在写入文件,我只是想提请注意这样一个事实,即您的代码应该只关心它正在写入 可能的 ostream代表任何类型的流。
【讨论】:
其他涵盖了可能导致输出失败的情况。
但是:
我是否需要检查每一个 write 或
对此,我会回答“不”。可以想象你也可以检查一下
good()。这当然取决于写入的数据类型,以及从部分写入恢复与重新运行应用程序的可能性/相对复杂性。
如果您需要更严格地控制写入失败的确切时间(例如,为了进行正常恢复),则可以使用 sym 链接到的 ostream 异常。每次操作后轮询流状态会使代码膨胀。
【讨论】:
ostream 立即成为例外的可能性,如果我需要它,那对我来说是一个很好的胜利。 ;-)
ostream::exceptions,还要禁用缓冲,我猜?我对 C 语言的 setvbuf() / _IONBF 很熟悉,但不太清楚如何使用 C++ 流实现无缓冲 I/O。你介意在我们讨论的时候把这个花絮也扔给我吗? ;-)