System.IO.IOException:进程无法访问文件"somefile.txt,因为它正被另一个进程使用



我正在尝试以只读模式打开文件。该文件由仍在运行的另一个应用程序创建,并且可能由该应用程序保持打开状态。但是,我能够使用记事本等文本编辑器打开文件。为什么无法以只读模式读取文件?

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 概念(。

似乎您可能想要制作FileShareReadWrite,以最大限度地提高与其他程序互操作的机会,如果您不知道它正在使用什么访问权限。

相关内容

最新更新