正在读取另一个进程使用的文件
本文关键字:文件 进程 读取 另一个 | 更新日期: 2023-09-27 18:28:07
我正在监视一个服务器程序正在写入的文本文件。每次更改文件时,内容都会输出到我的程序中的一个窗口。
问题是我不能在文件上使用Streamreader
,因为它是used by another process
。用ReadWrite
设置Filestream
不会有任何好处,因为我无法控制使用该文件的进程。
我可以用记事本打开这个文件。即使服务器正在使用它,也必须能够访问它
有什么好办法解决这个问题吗?
我应该做以下操作吗?
- 监视文件
- 当它更改时制作一个临时副本
- 读取临时副本
- 删除临时副本
每当服务器更改文件时,我都需要获取文件中的文本。
如果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);
只要另一个应用程序没有以独占方式锁定该文件,这就应该有效。