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

时间:2012-03-18 15:51:04

标签: c# file-io file-locking

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

问题在于我无法在文件Streamreader上使用used by another process。使用Filestream设置ReadWrite将无济于事,因为我无法控制正在使用该文件的进程。

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

这有什么好方法吗?

我应该这样做吗?

  1. 监控档案
  2. 更改时制作临时副本
  3. 阅读临时副本
  4. 删除临时副本。
  5. 每当服务器更改文件时,我都需要在文件中获取文本。

2 个答案:

答案 0 :(得分:96)

如果记事本可以读取文件,那么你也可以,显然程序没有对文件进行读锁定。您遇到的问题是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
    //...
}

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

答案 1 :(得分:13)

呼叫

File.Open(path, FileMode.Read, FileAccess.Read, FileShare.ReadWrite)

只要其他应用程序没有专门锁定文件,这就应该有效。

相关问题