任何人都可以指点一些讨论,包括打开文件进行读写的专家和骗局,而不是(例如)打开一个文件进行读取,关闭它然后重新打开写入。我试图在没有快乐的情况下搜索深入的信息。
非常感谢
答案 0 :(得分:4)
这取决于你在做什么。打开读写可能更难以正确和一致,因为它很容易意外地截断文件或无意中覆盖部分数据。
如果读取然后写入(可能是完全替换)实际上是一个选项,那么打开两个单独的文件可能会更简单,但考虑写入一个新文件并重命名,如果成功则确保如果某事(甚至编程)错误!)中断写入旧数据不会丢失。
如果您决定打开读/写,请务必仔细阅读文档,以免在打开时截断文件并注意查找和告知功能。除非你以二进制模式打开,否则你只能安全地通过寻找前一个告诉返回的位置。
答案 1 :(得分:3)
我认为最合理的原因是竞争条件。
假设两个用户将访问同一个文件并进行编辑。用户A打开文件,读入并关闭它。用户B在用户A有机会写入之前出现,他也读取文件。
现在,如果用户A已将文件保持打开状态,则用户B无法访问该文件进行阅读。在许多情况下,这是理想的行为,因为它避免了任何可能的竞争条件。用户B完成后才能访问该文件。
或者,让我们假设用户A和B不会重写文件中的任何内容,只会附加到它,并且它们这样做的顺序并不重要(日志记录就是一个很好的例子)。在这种情况下,在用户A写入之前,让用户B访问该文件是有意义的,因为用户B可能不关心用户A当前正在做什么。
显然,这两种情况都与您想要如何处理竞争条件有关,所以您应该首先考虑这个问题。通常阻塞行为可以防止竞争条件损害您的程序,所以我会默认这种行为,但要注意其他选择。
答案 2 :(得分:1)
速度
但这取决于你在做什么。
如果你要写很多小东西,最好保持开放 如果您要编写大量数据,那么每次需要时都可以(或许)更好地加载它。
同样适合阅读。
答案 3 :(得分:1)
由于没有人提及它,我会明白 - 因为你想同时读取和写入文件。
考虑像ISAM文件,你想要读取,添加,删除,替换各种偏移的记录,更新索引等等。通过在不打开和关闭文件的情况下寻找合适的位置,更容易做到!< / p>
答案 4 :(得分:1)
如果打开文件进行读写,则需要注意的另一件事是,您需要在读取和写入操作之间切换时刷新流