打开文件ReadOnly

xbo*_*nez 41 c# file-io

目前,这是我打开文件阅读它的方式:

 using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

如何在ReadOnly模式下打开文件,这样如果另一个进程同时打开文件,我的程序仍然可以读取它.

Han*_*ant 104

典型的问题是另一个进程打开文件进行写入.所有标准的File方法和StreamReader构造函数都使用FileShare.Read打开文件.这无法奏效,否认写共享.你不能否认写作,另一个过程是第一个并获得写入权限.因此,您将被拒绝访问.

您必须使用FileShare.ReadWrite,如下所示:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
using (var sr = new StreamReader(fs))
{
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

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


Jay*_*ggs 12

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

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

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