我有一个小问题。我有一个工具,应该每天解析一个日志文件,但不幸的是,这个日志文件正在被写入日志的进程使用,因此我无法停止它。
第一次尝试是创建文件的副本,然而这也行不通。
是否有任何方法可以让我读取当前正在使用的日志文件的文本内容呢?
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指定了在您使用文件时其他人可以对文件执行的操作。
在上面的例子中,您可以打开一个文件进行读取,而其他进程可以打开该文件以获得读/写访问权限。在大多数情况下,这适用于打开正在使用的日志文件。
你将取决于编写文件的程序。在Windows中,进程可以打开文件进行读取、写入或两者兼备,但它还可以控制其他进程是否可以打开文件进行读取、写入或两者兼备。如果其他进程拒绝了你读取文件内容的权利,那么你就无能为力。
如果你控制编写日志文件的程序的源代码,则更改它以允许其他进程读取访问。
File.OpenRead(path)
,这样可以让您访问文件的只读流;这样您就不会受到另一个应用程序对文件施加的写锁的干扰。这要看情况,你尝试过以只读方式读取文件吗?可以使用其中的一个静态方法。
System.IO.File.ReadAllText(path) or System.IO.File.ReadAllLines(path)
如果文件没有被独占锁定,它们可能会起作用。