你如何阅读正在使用的文件?

时间:2010-09-14 13:03:10

标签: c# file-io

我有一个小问题。我有一个工具应该每天解析一个日志文件,不幸的是这个日志文件正在被写入日志的进程使用,我无法阻止它。

首先尝试创建该文件的副本,但该文件无效。

有没有办法让我阅读日志文件的当前文本,即使它已经被使用了?

5 个答案:

答案 0 :(得分:82)

using (FileStream stream = File.Open("path to file", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
        {

        }
    }
}

FileAccess指定您要对文件执行的操作。 FileShare指定OTHERS在使用文件时可以对文件执行的操作。

在上面的示例中,您可以打开文件进行读取,而其他进程可以打开文件以进行读/写访问。在大多数情况下,这将用于打开正在使用的日志文件。

答案 1 :(得分:2)

使用File.OpenRead(path),这允许您访问文件的只读流;这样,如果另一个应用程序对文件有写锁定,你就不会受到打扰。

答案 2 :(得分:2)

您正在编写该文件的程序。在Windows中,进程可以打开文件进行读取,写入或两者兼有,但它也可以控制其他进程是否可以打开文件进行读取,写入或两者兼而有之。如果其他进程拒绝您阅读文件内容的权利,那么您无能为力。

如果您控制正在编写日志文件的程序的源代码,则将其更改为允许其他进程进行读取访问。

答案 3 :(得分:1)

这取决于你是否尝试过只读文件?使用其中一种静态方法

 System.IO.File.ReadAllText(path) or  System.IO.File.ReadAllLines(path)

如果文件没有完全锁定,它们可能会起作用

答案 4 :(得分:-3)

我强烈推荐BareTail,我们用它来实时查看所有日志。还支持突出显示,这非常有用。