为什么拒绝访问路径?

nic*_*wdy 141 c# asp.net io unauthorizedaccessexcepti

我有一个问题,我试图删除我的文件,但我得到一个例外.

if (result == "Success")
{
     if (FileUpload.HasFile)
     {
         try
         {
              File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
              string filename = Path.GetFileName(btnFileUpload.FileName);
              btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
         }
         catch (Exception ex)
         {
               Message(ex.ToString());
         }
      }
}
Run Code Online (Sandbox Code Playgroud)

另外我应该注意,我尝试删除的文件夹可以完全控制网络服务.

完整的异常消息是:

System.UnauthorizedAccessException:拒绝访问路径'C:\ Users\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\temp_loginimages\enviromental.jpg'.at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.File.Delete(String path)at hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(Object sender,EventArgs e)in C:\ Users\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\User_Controls\Imgloader_Add_Edit_Tbl.ascx.cs:第242行

有任何想法吗?

ria*_*ndl 174

我也遇到了问题,因此我在这篇文章上磕磕绊绊.我在复制/删除之前和之后添加了以下代码行.

删除

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
Run Code Online (Sandbox Code Playgroud)

复制

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
Run Code Online (Sandbox Code Playgroud)

  • 我给了'Everyone'完全权限,但没有成功.不知何故,这些文件属性有效.谢谢.我希望MS最终能够找到适当的安全模型.试图找出为什么复制/删除每隔几年爆炸的原因至少可以说是令人沮丧的. (16认同)
  • SetAttributes Normal是我的诀窍 - 我试图File.Copy并覆盖一个只读文件.. (12认同)
  • 拒绝访问路径并不表示该文件只是readonly(因为您确实可以访问该路径!)在我看来,应该更改错误消息.不管怎样,谢谢你的提示! (6认同)
  • +1!我使用了`Temporary`,这似乎对我也有效. (5认同)
  • 如何在复制操作后设置属性有帮助?该程序不会在复制声明中崩溃吗?复制操作之前是否应该像删除操作一样? (5认同)

Cra*_*Tim 153

根据File.Delete方法 ...

一个UnauthorizedAccessException装置的4件事情之一:

  • 呼叫者没有所需的权限.
  • 该文件是正在使用的可执行文件.
  • Path是一个目录.
  • Path指定了只读文件.

  • Path是一个目录.让我感到尴尬:/ (61认同)
  • @Tris,这意味着该路径通向目录,而不是文件。 (5认同)
  • 我检查了文件和权限,一切似乎都很好。我检查了用户。我可以通过资源管理器手动删除该文件。事实证明这是一个只读文件。我不确定为什么这对删除很重要,因为它没有被使用。不管怎样,我所做的就是添加一些代码: if (myFile.Attributes.HasFlag(FileAttributes.ReadOnly)) { myFile.Attributes-= FileAttributes.ReadOnly; myFile.Delete(); (4认同)
  • 昨天发生在我身上* facepalm *。我讨厌这个模棱两可的异常消息:( (3认同)
  • `路径是一个目录.感谢这个提示:)它帮助了我. (3认同)
  • 哦,我的...路径是目录。谢谢微软。这是非常未经授权的访问。 (3认同)
  • 我挣扎了超过 6 个小时,在查看您的回复后发现路径是目录...非常感谢@CrazyTim .. (2认同)
  • 这是误导性的,例外情况至少应该在消息中指定原因,或者更好地通过成员指定原因。 (2认同)

And*_*son 26

这是一个老问题,但我在搜索时碰到了它.事实证明我在SaveAs的保存路径中缺少实际的文件名组件...

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
Run Code Online (Sandbox Code Playgroud)


Ars*_*yan 17

当用户尝试连接到您的网站时,IIS会将连接分配给IUSER_ComputerName帐户,其中ComputerName是运行IIS的服务器的名称.默认情况下,IUSER_ComputerName帐户是Guests组的成员.该组有安全限制.尝试对该文件夹进行IUSER_ComputerName的大访问

以下是关于IIS安全性的非常好的描述答案

希望这可以帮助


bar*_*lop 13

我收到了错误,因为我没有意识到目标应该是一个文件.我有一个文件夹作为第二个参数(在cmd中工作).我得到了Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.因为C#File.Move想要一个文件,不仅仅是第一个参数,而是第二个参数,所以如果你把一个目录作为第二个参数,它就会尝试编写一个文件,就像c:\crp你有一个目录一样c:\crp.

这是不正确的 File.Move(args[0],"c:\\crp");

所以,这是正确的 File.Move(args[0],"c:\\crp\\a.a");

同样的道理 File.Copy


Ale*_*nov 11

右键单击Visual studio,然后单击 以管理员身份运行


小智 7

我也遇到同样的问题,我指向的是文件夹而不是文件。

所以请确保在路径中给出路径+文件名

System.IO.File.WriteAllBytes("path", bytearray);
Run Code Online (Sandbox Code Playgroud)


Bjø*_*ten 6

如果这是出现此问题的IIS网站,请检查该站点或应用程序使用的应用程序池的高级设置的Identity属性.您可能会发现它已设置为ApplicationPoolIdentity,在这种情况下,这是必须有权访问该路径的用户.

或者您可以使用旧样式并简单地将Identity设置为Network Service,并为Network Service用户提供对该路径的访问权限.


Bri*_*les 5

您需要修改要从中删除/保存到的文件夹的权限。右键单击包含的文件夹并使用“安全”选项卡允许修改应用程序运行所在的用户的权限。


小智 5

当操作系统因 I/O 错误或特定类型的安全错误而拒绝访问时引发的异常。

我也打了同样的事。检查以确保该文件未被隐藏。


小智 5

当操作系统由于 I/O 错误或安全错误而拒绝访问时,将引发 UnauthorizedAccessException 异常。

如果您尝试访问文件或注册表项,请确保它不是只读的


Jit*_*mar 5

当我的窗口服务开始抛出异常时,我也遇到了这个问题

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.
Run Code Online (Sandbox Code Playgroud)

因此,作为解决方案,我检查了与我的服务关联的用户帐户,如下面的屏幕截图所示

在此处输入图片说明

所以在我的情况下是网络服务

然后转到文件夹属性以检查关联的用户帐户是否也存在于其权限选项卡下。它在我的情况下丢失了,当我添加它时它解决了我的问题。

有关更多信息,请查看以下屏幕截图

在此处输入图片说明


Sea*_*nMC 5

我试图使用 System.IO.File.OpenWrite(path)

它不起作用,因为我只是将 OpenWrite() 传递到目录的路径,但它需要一直到您要写入的文件的路径。因此需要将末尾包含 filename.extension 的完整路径传递给 OpenWrite 以避免 UnauthorizedAccessException


D_B*_*ter 5

就我而言,问题在于诺顿。我的内部程序没有正确的数字签名,当它尝试删除文件时,它给出了 UnauthorizedAccessException。

在此输入图像描述

如果它向您发出通知,您可以从那里进行处理。就我而言,它没有给出我注意到的通知。以下是如何防止诺顿阻止该程序。

  1. 打开诺顿
  2. 单击向下箭头
  3. 点击历史记录
  4. 按计划查找活动
  5. 单击更多选项
  6. 单击排除进程