读/写一个文件,这个文件肯定会在随机时间被使用

本文关键字:文件 随机 时间 一个 | 更新日期: 2023-09-27 18:19:01

我需要读取一个基于文本的日志文件来检查某些内容(备份作业的完成)。显然,作业完成时将向该文件写入。

我的问题是,我如何(或者我应该如何写代码来)读取文件,考虑到文件可能被锁定,或者在需要读取时被我的进程锁定,而不引起任何可靠性问题

读/写一个文件,这个文件肯定会在随机时间被使用

假设写入进程在打开文件时至少指定了System.IO.FileShare.Read,那么您应该能够在文本文件仍被写入时读取该文本文件

除了@BrokenGlass:

的答案
  • 只打开文件进行读取。如果您试图打开它进行读/写访问,则更有可能(几乎肯定)失败-您可能无法打开它,并且/或者您可能会阻止其他进程能够写入它。

  • 当你不读取文件时关闭它,以尽量减少你可能给任何其他进程带来问题的机会。

  • 如果写进程在写文件时拒绝读访问,你可能不得不写某种形式的"重试循环",这允许你的应用程序等待(不断重试)直到文件变得可读。只要尝试打开文件(并捕获错误)-如果失败,则Sleep()一会,然后再试一次。(但是,如果您正在监视一个日志文件,您可能会想要继续检查它是否有更多的数据)

当一个文件正在被写入时,对于所有试图以写模式打开该文件的其他进程,该文件将被锁定。读取模式将始终可用。

但是,如果您的写入进程保存更改,而您已经在阅读过程中打开了文件,则更改将不会反映在那里,直到您再次刷新(关闭打开)文件。