这个问题已经在这里有了答案 :
即使遇到“另一个进程正在使用”异常,如何读取文件? (4个答案)
4年前关闭。
我正在监视服务器程序正在写入的文本文件。每次更改文件时,内容都会输出到我程序中的一个窗口。
问题是我不能Streamreader在文件上使用它used by another process。设置Filestreamwith ReadWrite不会有任何好处,因为我无法控制使用该文件的过程。
Streamreader
used by another process
Filestream
ReadWrite
我可以在记事本中打开文件。即使服务器正在使用它,也必须能够访问它。
有没有解决这个问题的好方法?
我应该做以下事情吗?
每当服务器更改它时,我都需要在文件中获取文本。
如果记事本可以读取文件,那么您也可以,显然,程序没有在文件上设置读取锁定。您遇到的问题是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 //... }
在这里猜测编码。您必须谨慎使用此类代码,其他程序正在主动写入文件。您不会得到非常可靠的文件结尾指示,很有可能会得到部分最后一行。当您继续读取文件以尝试获取程序附带的任何内容时,尤其麻烦。