打开文件ReadOnly

目前,我正在打开一个文件来读取它:

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... } 

当心,你仍然有一个棘手的问题,你正在阅读一个半写的文件。 另一个进程在随机时间点将数据刷新到文件中,您可能只读取了半行文本。 因人而异。

如果您想以只读方式打开文件,请尝试以下操作:

  using (TextReader reader = new StreamReader(File.OpenRead(Path.Combine(client._WorkLogFileLoc, "dump.txt")))) { //do stuff } 

注意对File.OpenRead()的调用。

您可以通过调用File.SetAttributes来设置文件属性

 string path = Path.Combine(client._WorkLogFileLoc, "dump.txt"); FileAttributes curAttributes = File.GetAttributes(path); File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly);