读取另一个进程使用的文件

Chr*_*fer 45 c# file-io file-locking

我正在监视由服务器程序写入的文本文件.每次更改文件时,内容都将输出到我的程序中的窗口.

问题是我无法使用Streamreader文件used by another process.建立一个FilestreamReadWrite将没有任何好处,因为我无法控制所使用的文件的过程.

我可以在记事本中打开文件.即使服务器正在使用它,也必须能够访问它.

这有什么好办法吗?

我应该做以下事情吗?

  1. 监控文件
  2. 更改时制作临时副本
  3. 阅读临时副本
  4. 删除临时副本.

每当服务器更改文件时,我都需要在文件中获取文本.

Han*_*ant 99

如果记事本可以读取文件那么你也可以,显然程序没有对文件进行读锁定.您遇到的问题是StreamReader将使用FileShare.Read打开该文件.哪个否认写入权限.这不起作用,另一个程序已经获得了写访问权限.

您需要像这样创建StreamReader:

using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var sr = new StreamReader(fs, Encoding.Default)) {
    // read the stream
    //...
}
Run Code Online (Sandbox Code Playgroud)

在这里猜测编码.你必须小心这种代码,另一个程序正在积极地写入文件.你不会得到一个非常可靠的文件结束指示,很可能获得部分最后一行.当你继续阅读文件以试图获得附加的程序时,尤其麻烦.

  • 使用`FileShare.ReadWrite | FileShare.Delete`您可以访问更多数量的文件.当`FileShare.ReadWrite`不够时,值得尝试 (3认同)
  • 谢谢...我没有意识到FileShare.Read在这种情况下是不正确的. (2认同)

SLa*_*aks 14

呼叫

File.Open(path, FileMode.Read, FileAccess.Read, FileShare.ReadWrite)
Run Code Online (Sandbox Code Playgroud)

只要其他应用程序没有专门锁定文件,这应该可以工作.

  • `FileMode.Read` 不存在 (2认同)