【发布时间】:2013-01-31 15:09:52
【问题描述】:
打开文件的输入流是否安全,同时打开同一文件的输出流(但不写入) (单线程)
【问题讨论】:
-
如果不写入文件,为什么要打开文件的输出流?
-
我有一个写入日志文件的类,我想保持流打开,以便我可以随时写入日志文件。我还想每隔一段时间打开一个输入流来检查日志文件的大小。
打开文件的输入流是否安全,同时打开同一文件的输出流(但不写入) (单线程)
【问题讨论】:
部分取决于系统。系统可能不允许。除此之外,一旦您打开了一个流进行写入,并且在同一个文件上打开了多个流(无论方向如何),您就必须担心缓冲。在您的情况下,如果您在打开流进行读取之前进行刷新,并且在阅读时不要写入,则应该没问题。如果您尝试写入并读取您写的最后一件事,那就更困难了,因为您无法将读取缓冲区与文件重新同步。如果你试图通过两个不同的流进行写入,那就更成问题了。 (虽然如果写入应该始终附加在末尾,并且您可以在刷新时进行安排,则使用 std::ios_base::app 打开文件应该可以解决问题。但这无助于阅读。)
【讨论】:
这可能是“不安全”的,就像不戴头盔骑自行车不安全一样。事情可能更容易出错,但如果你聪明且小心,那应该没关系。但是,实际上没有必要这样做,您可以在要读入时关闭输出流,然后在读完后重新打开它。
【讨论】: