C# 以不妨碍其他进程修改文件的方式读取文件

C# 以不妨碍其他进程修改文件的方式读取文件,c#,windows,file-io,C#,Windows,File Io,我需要连续读取日志文件来检测某些模式。如何在不干扰日志编写器操作需要执行的文件操作的情况下执行此操作 日志编写器进程除了写入日志外,还会定期将文件移动到另一个位置(达到一定大小的位置) 按照我读取文件的方式,log writer应用程序无法移动文件。我玩了各种文件共享选项,但都没有用 以下是我的代码的简化版本: using (FileStream stream = new FileStream(@"C:\temp\in.txt", FileMode.Open, FileAccess.Read,

我需要连续读取日志文件来检测某些模式。如何在不干扰日志编写器操作需要执行的文件操作的情况下执行此操作

日志编写器进程除了写入日志外,还会定期将文件移动到另一个位置(达到一定大小的位置)


按照我读取文件的方式,log writer应用程序无法移动文件。我玩了各种文件共享选项,但都没有用

以下是我的代码的简化版本:

 using (FileStream stream = new FileStream(@"C:\temp\in.txt", FileMode.Open, FileAccess.Read, FileShare.Delete))
        { 
            TextReader tr = new StreamReader(stream);
            while (true)
            {

                Console.WriteLine(".. " + tr.ReadLine());
                Thread.Sleep(1000);
            }

        }

您将始终保持文件打开,而不仅仅是在要读取的内容发生更改时


我认为更好的方法是使用监视文件的更改,然后在更改时打开文件并读取新数据。如果文件仅附加到,则可以跟踪处理文件的时间,并在打开文件后立即查找到该位置。

请尝试
FileShare.ReadWrite | FileShare.Delete


但是如果文件被删除(移动),那么我认为您的读取将失败。

“日志编写器应用程序无法移动文件”--您想让正在移动的文件上的读卡器保持打开状态吗?只要文件可用,我想继续读取。我无法控制日志应用程序何时/如何移动文件。理想情况下,当文件被移动并且从那时开始读取新的日志文件时,我会出现异常。如果这是一个使用量适中(或非常频繁)的日志文件(我怀疑可能是),那么这将不断触发。假设这个文件每秒写入1000行…@anders,那么他也有同样的问题,可能是当读者阅读时,作者想移动这个文件。就像Joe提到的,这是一个日志文件,会不断更新。谢谢。这正是我想要的。