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

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

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

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

有没有一个好方法呢?

我应该做下面的事情吗?

  1. 监视文件
  2. 做一个临时副本,当它改变
  3. 阅读临时副本
  4. 删除临时副本。

我需要在服务器更改文件时获取文本。

如果记事本可以读取文件,那么你也可以,显然程序没有把读locking在文件上。 您遇到的问题是StreamReader将使用FileShare.Read打开文件。 哪些拒绝写访问。 这是行不通的,另一个程序已经获得了写权限。

你需要像这样创buildStreamReader:

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

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

呼叫

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

这应该工作,只要其他应用程序没有专门locking文件。