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

本文关键字:文件 进程 读取 另一个 | 更新日期: 2023-09-27 18:28:07

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

问题是我不能在文件上使用Streamreader,因为它是used by another process。用ReadWrite设置Filestream不会有任何好处,因为我无法控制使用该文件的进程。

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

有什么好办法解决这个问题吗?

我应该做以下操作吗?

  1. 监视文件
  2. 当它更改时制作一个临时副本
  3. 读取临时副本
  4. 删除临时副本

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

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

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

猜测这里的编码。你必须小心处理这种代码,其他程序正在主动写入文件。你不会得到一个非常可靠的文件结尾指示,很有可能得到最后一行的一部分。特别麻烦的是,当你一直在阅读文件,试图获得任何附加的程序。

使用

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

只要另一个应用程序没有以独占方式锁定该文件,这就应该有效。