从网络共享中读取文件时,为什么会出现UnauthorizedAccessException?

时间:2017-01-04 13:53:45

标签: c# asp.net directory

使用此代码:

DirectoryInfo info = new DirectoryInfo("\\s01\sharedfolder\folder");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();

我得到System.UnauthorizedAccessException

  

访问路径' \ s01sharedfolder \ folder'被拒绝。

     

System.UnauthorizedAccessException:访问路径' \ s01 \ sharedfolder \ folder'被拒绝。

On' s01'我已Everyone完全控制sharedfolder。我还将该共享文件夹的所有者设置为everyone

.net应用程序的应用程序池的标识设置为LocalSystem,我也尝试使用本地管理员作为标识。

无论我尝试什么,我都会得到这个例外。我需要做些什么来解决这个问题?

编辑: 我也尝试创建一个符号链接,但这给出了相同的异常

2 个答案:

答案 0 :(得分:1)

LocalSystem仅在本地计算机上有效。如果共享位于另一台计算机上,那么您将获得此异常。

可能值得为您的站点设置一个专用帐户(IIS池),并授予网络资源所需的权限(如果使用Windows身份验证,则为文件共享和数据库),并且是您站点的本地权限( ala本地文件系统)。

当作为系统运行时,您只能获得该本地计算机的管理员权限(我认为)。

答案 1 :(得分:0)

使用File.OpenRead可能是预期的行为,而不是权限问题。 File.OpenRead尝试在本地计算机中打开具有该名称的文件。大多数情况下,文件位于服务器中,而不位于本地(客户端)计算机中。因此,无论为该文件夹分配了什么权限,它都将失败。请尝试使用InputStream。示例:

String fileToUpload = FileUpload2.PostedFile.FileName;
long contentLength = FileUpload2.PostedFile.InputStream.Length;

byte[] buffer = new byte[contentLength];

FileUpload2.PostedFile.InputStream.Seek(0, SeekOrigin.Begin);
FileUpload2.PostedFile.InputStream.Read(buffer, 0, Convert.ToInt32(contentLength));

Stream stream = new MemoryStream(buffer);

来源:System.UnauthorizedAccessException occurred in mscorlib.dll