Tob*_*ner 59 c++ fstream std ofstream
可能重复:
我是否需要手动关闭ifstream?
我是否需要调用fstream.close()
或是fstream
一个正确的RAII对象,在销毁时关闭流?
我std::ofstream
在方法中有一个本地对象.我可以假设退出此方法后文件总是关闭而不调用close吗?我找不到析构函数的文档.
Kon*_*lph 89
我认为以前的答案是误导性的.
fstream
是一个合适的RAII对象,它会在作用域的末尾自动关闭,并且在作用域结束时关闭时,完全没有必要close
手动调用.
特别是,它不是"最佳实践",也没有必要刷新输出.
虽然Drakosha是正确的,但调用close
让你有可能检查流的失败位,无论如何都没有人这样做.
在一个理想的世界中,人们可以stream.exception(ios::failbit)
事先调用并处理在fstream
析构函数中抛出的异常.但不幸的是,析构函数中的异常在C++中是一个破碎的概念,所以这不是一个好主意.
因此,如果要检查关闭文件是否成功,请手动执行(但仅限于此).
要附加到Amy Lee的答案,最好手动完成,因为这样你也可以检查错误.
BTW,根据"关闭"手册页:
不检查close()的返回值是一个常见但严重的编程错误.很可能首先在最后的close()上报告先前write(2)操作的错误.关闭文件时不检查返回值可能会导致数据无声丢失.使用NFS和磁盘配额尤其可以观察到这种情况.
成功关闭并不能保证数据已成功保存到磁盘,因为内核会延迟写入.当流关闭时,文件系统刷新缓冲区并不常见.如果您需要确保数据是物理存储的,请使用fsync(2).(这取决于此时的磁盘硬件.)
归档时间: |
|
查看次数: |
30861 次 |
最近记录: |