在我的应用程序中,我正在阅读.PDF文件,使用System.IO.FileStream(filePath)。当文件夹具有本地用户权限时,这工作正常。当我从文件夹中删除本地用户时,这会给出访问被拒绝错误。 我使用这段代码......
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();
一旦我将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();
我想知道这有什么不同? 如果有人知道请帮忙。
答案 0 :(得分:2)
File.OpenRead
方法在打开文件时使用FileAccess.Read
。区别于:
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
documentation说明了您正在使用的构造函数:
对于没有
FileAccess
参数的构造函数,如果mode参数设置为Append,则Write是默认访问权限。否则,访问权限设置为ReadWrite
。
所以我猜你没有权限写这个文件。这就是它抛出异常的原因。您可以尝试使用ReadWrite
访问权限打开流来验证这一点:
new FileStream(strPath, FileMode.Open, FileAccess.ReadWrite);
答案 1 :(得分:1)
... new System.IO.FileStream(strPath, System.IO.FileMode.Open)
当你只说“我想打开文件”时,.NET不知道你是否要读取或写入文件。所以它猜测两者都是安全的,FileAccess.ReadWrite。但是,文件系统目录通常只允许用户读取文件并禁止写入。任何机器上的标准示例是c:\ windows和c:\ program files目录及其子目录。所以这个例外并不出乎意料。
您必须明确表达您对该文件的意图。就像File.OpenRead()隐含的只是它的名字。您必须添加FileAccess.Read参数。
轶事:File类很晚才被添加到框架中。受微软进行框架可用性研究的启发。他们询问有经验的程序员,他们从未见过.NET使用FileStream编写示例程序。没有人做对了。