System.IO.File.OpenRead 正在工作,但 System.IO.FileStream 不工作?

Man*_*lia 2 .net c#

在我的应用程序中,我正在使用 System.IO.FileStream (filePath) 读取 .PDF 文件。当文件夹具有本地用户权限时,此功能可以正常工作。当我从文件夹中删除本地用户权限时,这会出现访问被拒绝的错误。我正在使用这个代码...

System.IO.FileStream objFStream = new System.IO.FileStream(strPath, System.IO.FileMode.Open);
        byte[] bytRead = new byte[(int)objFStream.Length];
        objFStream.Read(bytRead, 0, (int)objFStream.Length);
        objFStream.Close();
        objFStream.Dispose();
Run Code Online (Sandbox Code Playgroud)

一旦我将 System.IO.FileStream 替换为 System.IO.File.OpenRead(strPath) ,它将起作用。替换代码是...

System.IO.FileStream objFStream = System.IO.File.OpenRead(strPath);
            byte[] bytRead = new byte[(int)objFStream.Length];
            objFStream.Read(bytRead, 0, (int)objFStream.Length);
            objFStream.Close();
            objFStream.Dispose();
Run Code Online (Sandbox Code Playgroud)

我想知道这有什么不同?如果有人知道请帮忙。

Sel*_*enç 6

File.OpenRead方法FileAccess.Read在打开文件时使用。区别在于:

return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

文档介绍了您正在使用的构造函数:

对于不带FileAccess参数的构造函数,如果 mode 参数设置为 Append,则默认访问为 Write。否则,访问权限设置为ReadWrite

所以我猜你没有权限写入该文件。这就是它抛出异常的原因。您可以通过尝试使用访问权限打开流来验证这一点ReadWrite

new FileStream(strPath, FileMode.Open, FileAccess.ReadWrite);
Run Code Online (Sandbox Code Playgroud)