我正在尝试以只读模式打开文件。该文件由仍在运行的另一个应用程序创建,并且可能由该应用程序保持打开状态。但是,我能够使用记事本等文本编辑器打开文件。为什么无法以只读模式读取文件?
string file = @"c:tempsomefile.txt";
FileInfo fi = new FileInfo(file);
int len = (int)fi.Length;
char[] chars = new char[len];
var fs = new FileStream(file, FileMode.Open, FileAccess.Read);
int numBytesToRead = (int)fs.Length;
int numBytesRead = 0;
using (var sr = new StreamReader(fs))
{
int n = sr.Read(chars, numBytesRead, len);
}
您必须使用接受FileShare
参数的FileStream
构造函数的重载之一。
基本上,所有打开的文件句柄都必须同意 - 您的FileAccess
必须与其FileShare
兼容,您的FileShare
必须与其FileAccess
兼容(当然,我在这里使用 .NET 名称,但这些映射到所有程序通用的核心 Windows 概念(。
似乎您可能想要制作FileShare
ReadWrite
,以最大限度地提高与其他程序互操作的机会,如果您不知道它正在使用什么访问权限。