当前,这是我打开文件以读取它的方式:
using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt"))) { //do stuff }
如何以ReadOnly模式打开文件,以便如果另一个进程同时打开了文件,我的程序仍可以读取它。
典型的问题是其他进程打开了要写入的文件。所有标准的File方法和StreamReader构造函数都使用FileShare.Read打开文件。那行不通,拒绝写共享。您不能拒绝写入,首先是其他过程,并且具有写访问权。因此,您将被拒绝访问。
您必须使用FileShare.ReadWrite,如下所示:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using (var sr = new StreamReader(fs)) { // etc... }
当心您仍然会遇到棘手的问题,您正在读取一个半写的文件。另一个过程会在随机的时间点将数据刷新到文件中,您很可能只读取了一半的文本。YMMV。