Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取正在使用的文件?_C#_File Io - Fatal编程技术网

C# 如何读取正在使用的文件?

C# 如何读取正在使用的文件?,c#,file-io,C#,File Io,我有个小问题。我有一个工具,应该每天解析一个日志文件,不幸的是,这个日志文件正在被写入日志的进程使用,我无法停止它 第一次尝试是创建文件的副本,但该副本也不起作用 即使日志文件已经在使用中,我是否有办法读取日志文件的当前文本?我强烈建议,我们可以使用它实时查看所有日志。还支持突出显示,这非常有用。使用File.OpenRead(path),这允许您访问文件的只读流;这样,如果另一个应用程序对该文件具有写锁定,您就不会感到麻烦。这取决于您是否尝试过以只读方式读取该文件?使用静态方法之一 Syst

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

第一次尝试是创建文件的副本,但该副本也不起作用


即使日志文件已经在使用中,我是否有办法读取日志文件的当前文本?

我强烈建议,我们可以使用它实时查看所有日志。还支持突出显示,这非常有用。

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

这取决于您是否尝试过以只读方式读取该文件?使用静态方法之一

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

如果该文件未被独占锁定,它们可能会工作

您将任由编写该文件的程序摆布。在Windows中,一个进程可以打开一个文件进行读取、写入或两者兼有,但它也可以控制其他进程是否可以打开该文件进行读取、写入或两者兼有。如果另一个进程拒绝您读取文件内容的权利,那么您对此无能为力

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

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

        }
    }
}
FileAccess指定要对文件执行的操作。 文件共享指定在您使用该文件时,其他人可以对该文件执行哪些操作


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

您如何读取它?取决于工具如何打开日志文件。如果它很好并且使用文件共享读取,您可以按照其他海报的建议打开日志文件进行读取;否则你就倒霉了。嗯。。。看起来OP需要一种编程方式来读取已经打开的文件=P+1,这里唯一正确的答案。指定FileShare.ReadWrite是至关重要的。另一个进程已经获得了写访问权限,您不能拒绝。谢谢,这非常有效!不,没有。看看reflector:返回新的文件流(路径,FileMode.Open,FileAccess.Read,FileShare.Read);是的,File.OpenRead不适用于meGives meGives meGives相同的“使用中的文件”错误不总是正确的,我在读取锁定的日志文件时遇到问题,我正在使用File.OpenReadFile.OpenRead在其他应用程序已打开该文件进行写入时不会打开该文件。Tom Vervoort的答案是正确的。这会在写入文件时引发异常