C# 读取被其他进程锁定的文件(?)

C# 读取被其他进程锁定的文件(?),c#,C#,我想读取由其他进程打开(并锁定?)的文件的内容。 我用File.ReadAllText()和newstreamreader(newfilestream(path,FileMode.Open,FileAccess.Read))尝试了它,但这两种方法都会触发IOException 例如,我可以使用记事本++打开文件,并且显示内容,因此我认为使用c#也可以这样做。您需要使用FileStream构造函数重载,该重载采用FileShare参数。并传递FileShare.ReadWrite。您只能在允许写访

我想读取由其他进程打开(并锁定?)的文件的内容。 我用
File.ReadAllText()
newstreamreader(newfilestream(path,FileMode.Open,FileAccess.Read))
尝试了它,但这两种方法都会触发IOException


例如,我可以使用记事本++打开文件,并且显示内容,因此我认为使用c#也可以这样做。

您需要使用FileStream构造函数重载,该重载采用
FileShare
参数。并传递
FileShare.ReadWrite
。您只能在允许写访问的情况下打开该文件,因为其他程序已经获得了该权限。否则,您的尝试到目前为止失败的原因是,他们使用了FileShare.Read。无法工作,您不能拒绝写入访问,因为其他程序已获得该权限


在您读取文件时处理写入文件的程序完全取决于您自己。结果可能是随机的。任何事情都是可能的,但一般来说,对于日志文件,您会得到一个部分写入的最后一行,它位于程序实际输出的后面,其中一些仍然在程序的文件缓冲区中。4096字节的缓冲区大小是一个常见的选择。

您需要使用FileStream构造函数重载,该重载接受一个
FileShare
参数。并传递
FileShare.ReadWrite
。您只能在允许写访问的情况下打开该文件,因为其他程序已经获得了该权限。否则,您的尝试到目前为止失败的原因是,他们使用了FileShare.Read。无法工作,您不能拒绝写入访问,因为其他程序已获得该权限


在您读取文件时处理写入文件的程序完全取决于您自己。结果可能是随机的。任何事情都是可能的,但一般来说,对于日志文件,您会得到一个部分写入的最后一行,它位于程序实际输出的后面,其中一些仍然在程序的文件缓冲区中。4096字节的缓冲区大小是一个常见的选择。

IOException对象的异常消息是什么?“进程无法访问文件“…”,因为它被另一个进程使用。“如果同时将
FileShare.Read
传递给
FileStream
构造函数(最后)?同样的问题,@SimonWhitehead.
IOException
对象的异常消息是什么?“进程无法访问文件“…”,因为它被另一个进程使用。“如果您还将
FileShare.Read
传递给
FileStream
构造函数(最后)?会发生什么?同样的问题,@SimonWhitehead.If使用其他进程
FileShare.None
指定
FileShare.ReadWrite
也没有意义,对吗?我想它会失败吗?我说的对吗?当然,与FileShare.ReadWrite共享打开的文件可能会有问题,因为任何应用程序,而不仅仅是您自己的应用程序,都可以随时修改文件,这很容易使您的应用程序出错。我想,这仍然是有意义的,只是不起作用。“None”的意思是,没有其他人可以打开该文件。ReadWrite已经有问题了,如果文件与一个进程共享,那么多个进程并不能使它变得更好。但是,几乎任何应用程序都会使用FileShare.Read打开文件写入,以防止其他应用程序也写入该文件。这永远不会有好的结局。在对文件共享值进行推理时,请确保颠倒角色以理解它们。如果使用了其他进程
FileShare.None
指定
FileShare.ReadWrite
也没有意义,对吗?我想它会失败吗?我说的对吗?当然,与FileShare.ReadWrite共享打开的文件可能会有问题,因为任何应用程序,而不仅仅是您自己的应用程序,都可以随时修改文件,这很容易使您的应用程序出错。我想,这仍然是有意义的,只是不起作用。“None”的意思是,没有其他人可以打开该文件。ReadWrite已经有问题了,如果文件与一个进程共享,那么多个进程并不能使它变得更好。但是,几乎任何应用程序都会使用FileShare.Read打开文件写入,以防止其他应用程序也写入该文件。这永远不会有好的结局。在对文件共享值进行推理时,请确保颠倒角色以理解它们。