目前,这就是我打开文件来读取它的方式:
using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
//do stuff
}
如何以只读模式打开文件,以便如果另一个进程同时打开该文件,我的程序仍然可以读取它。
典型的问题是其他进程打开文件进行写入。所有标准 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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)