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

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

首先尝试创build一个文件的副本,这也是行不通的。

有什么办法可以让我读取日志文件的当前文本,即使它已经被使用了吗?

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可以使用哪些文件。

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

使用File.OpenRead(path) ,这允许您访问文件的只读stream; 这样,如果另一个应用程序在文件上有写入locking,你将不会感到困扰。

您正在编写该文件的程序的摆布。 在Windows中,进程可以打开一个文件进行读取,写入或两者兼容,但是也可以控制其他进程是否可以打开文件进行读写。 如果其他进程已经拒绝你阅读文件内容的权利,那么你就无能为力了。

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

这取决于,你是否尝试读取只读的文件? 使用静态方法之一

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

如果文件没有被locking,他们可能会工作

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