什么情况ostream :: write或ostream :: operator <<会失败?

ipl*_*uto 4 c++ file ofstream ostream

在我的C++代码中,我经常将不同的值写入文件中.我的问题是,如果有任何写入或<<会失败的情况,考虑到文件已成功打开的事实.我是否需要检查每一次写入或<<确认它是否正确执行?

sya*_*yam 9

列出所有内容的失败原因太多了.可能的是:

  • 分区终于满了
  • 用户超过了他的磁盘配额
  • 该分区已被残酷地卸下
  • 分区已损坏(文件系统错误)
  • 磁盘物理上失败了
  • ...

我是否需要检查每一次写入或<<确认它是否正确执行?

如果你希望你的程序能够适应故障,那么肯定是的.如果你不这样做,它只是意味着你写的数据可能会或可能不会写,这相当于你不关心它.

注意:不是在每次操作之后检查流状态(很快就会非常繁琐),你可以设置std::ostream::exceptions自己的喜好,这样当流失败时流会抛出异常(这应该不是问题,因为这样的磁盘故障是相当的特殊的定义).

  • @ipluto:看看我的编辑,以避免"手动"检查每一个电话.在这种情况下,我认为异常是**正确的工具. (2认同)

Cam*_*ner 7

写入可能失败的原因有很多.我的头顶是几个:

  1. 磁盘已满
  2. 磁盘发生故障
  3. 该文件位于NFS挂载上,网络出现故障
  4. 您正在写入的流(请记住,ostream并不总是文件)恰好是下游读取器崩溃时关闭的管道
  5. 您正在写入的流是TCP套接字,同行消失了

等等.

编辑:我知道你已经说过你正在写一个文件,我只是想提醒你注意这样一个事实:你的代码应该只关心它写的是一个可以代表任何类型流的ostream .