我有一个小问题。我有一个工具应该每天解析一个日志文件,不幸的是这个日志文件正在被写入日志的进程使用,我无法阻止它。
首先尝试创建该文件的副本,但该文件无效。
有没有办法让我阅读日志文件的当前文本,即使它已经被使用了?
答案 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,我们用它来实时查看所有日志。还支持突出显示,这非常有用。