在我的C++代码中,我不断向文件中写入不同的值。我的问题是,如果有任何情况下写或<会失败,考虑到文件已成功打开的事实。我是否需要检查每一次写入或< <以确保它正确执行?什么情况下ostream :: write或ostream :: operator <<会失败?
4
A
回答
9
有太多的失败原因列出他们全部。个可能的是:
- 分区终于满
- 用户超过了磁盘配额
- 分区已经惨遭卸载
- 分区已经损坏(文件系统错误)
- 的磁盘物理
- 失败...
我是否需要检查每一次写入或< <以确保它正确执行?
如果你希望你的程序是有弹性的,以失败的话,肯定,是。如果你不这样做,它只是意味着你写的数据可能写或不写,这就等于说你不关心它。
注:而不是每次操作后检查流状态(这将很快成为极其乏味的),你可以设置std::ostream::exceptions
根据自己的喜好,这样,当它失败的流将抛出一个异常(这不应该是一个因为这种磁盘故障的定义非常特殊)。
7
3
其他包括可能导致输出失败的情况。
但是:
我需要检查写或< <的每一个电话,以确保它是正确执行?
为了这个问题,我会回答 “不”。你可以想象一样好检查
- 如果文件被成功打开,并
- 如果流仍
good()
你写你的数据之后。
这当然取决于写入的数据类型以及从部分写入恢复与重新运行应用程序的可能性/相对复杂性。
如果您需要在什么时候写失败了更严格的控制(例如,为了做一个优雅的恢复),该ostream的例外SYAM挂钩是要走的路。每次操作后轮询流状态都会使代码膨胀。
相关问题
- 1. operator << overloading ostream
- 2. C++ ostream << Operator
- 3. std :: ostream&operator <<(std :: ostream&sstr,const T&val)的模糊重载
- 4. std :: ostream&operator <<(std :: ostream&,const T&)不被覆盖
- 5. 为什么ostream :: operator <<字符参数的全局函数?
- 6. Ostream << overloading confusion
- 7. 在什么情况/情况下,dynamic_cast <>可能会失败?
- 8. 为什么`std :: common_type_t <std :: ostream&,std :: ostream&>`等于`std :: ostream`而不是`std :: ostream&`?
- 9. Overload ostream <<运算符
- 10. ostream的运营商<<调用父ostream的
- 11. C++运算符<<调用:: ostream而不是std :: ostream
- 12. 在类名称如ostream&operator <<(...)之后使用时,和号是什么?
- 13. 的std :: ostream的私人继承和使用operator <<
- 14. 为QString继承std :: ostream和operator <<的类
- 15. C++:无法在ostream&operator中创建节点指针<<
- 16. 对operator <<(std :: ostream&,Zfraction)'undefined的引用'
- 17. 重载ostream&operator <<:如何强制输出零?
- 18. 运营商<<(ostream&os,...)模板类
- 19. C++ istream >>和ostream << errors
- 20. 什么时候为一个类定义ostream运算符<<?
- 21. 重载ostream的<<操作
- 22. 分割错误过载ostream(<<)
- 23. 超载运算符<<用于ostream
- 24. 重载运算符<< ostream的
- 25. ostream的deferencing运营商<<
- 26. 'operator <<'(包括字符串和ostream和重载<<)在c + +
- 27. 重载运算符<< ostream语法
- 28. Ostream <<和运算符 - =对于类?
- 29. 重载运算符<< operator ==和operator!=
- 30. 在什么情况下AppDomain.DoCallback()会失败?
如果什么硬盘失败了吗? – chris
这是我能想到的唯一的事情。 – ipluto