为什么访问路径被拒绝?

问题描述:

我有一个问题,我试图删除我的文件,但我得到一个异常。为什么访问路径被拒绝?

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()); 
     } 
     } 
} 

另外我应该注意,我试图删除的文件夹已完全控制网络服务。

完整异常消息为:

System.UnauthorizedAccessException:对路径 'C:\用户\ gowdyn \文件\的Visual Studio 2008 \项目\混合\混合\ temp_loginimages \ enviromental.jpg'被拒绝。 System.IO .__中的System.IO.__错误.WinIOError(Int32错误代码,字符串maybeFullPath)在System.IO.File.Delete(字符串路径)在hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(对象发件人,EventArgs e)在C:\ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs:line 242

任何想法?

+4

什么是不明确的例外?应用程序正在运行的帐户对该文件/文件夹没有访问权限。 – Oded 2012-01-11 15:01:12

+3

我了解异常情况。问题是这个功能被一些需要使用系统修改图像的用户使用。部分原因是通过删除旧图像并保存新图像来替换图像。 – 2012-01-11 15:25:55

+0

检查您对该文件夹的访问权限。 使用属性窗口中的安全选项卡给予文件夹的适当权限 – gasroot 2013-05-23 17:01:40

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

+0

你假设他是他的机器的管理员..如果这是一台工作机器,他只是一个用户..他们可能会设置权限的方式有原因..因为我们只是假设 – MethodMan 2012-01-11 15:06:52

+1

这是一个工作机器和我是一个权力用户。我不以管理员身份登录。图像文件夹的属性已被修改,因此网络服务具有完全访问权限。但是这没有什么区别。 – 2012-01-11 15:24:18

+0

我刚刚添加了“所有人”,完全访问该文件夹,“voilá” – MarceloBarbosa 2017-01-17 13:45:06

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

Here是有关IIS安全性很好的描述答案

希望这有助于

+0

这是节省我的时间。 :) – nirupam 2017-09-21 04:16:35

我也面临着试图在服务器部署后,要做到这一点,当同样的问题:

dirPath = Server.MapPath(".") + "\\website\\" + strUserName; 
if (!Directory.Exists(dirPath)) 
{ 
    DirectoryInfo DI = Directory.CreateDirectory(dirPath); 
} 
string filePath = Server.MapPath(".") + "\\Website\\default.aspx"; 
File.Copy(filePath, dirPath + "\\default.aspx", true); 
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal); 

我将IIS的权限授予其他组,包括管理员和我的问题得到解决。

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

我碰到同样的事情。检查以确保该文件不被隐藏。

我也有这个问题,所以我在这篇文章中磕磕绊绊。我在复制/删除之前和之后添加了以下代码行。

删除

File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

复制

File.Copy(file, dest, true); 
File.SetAttributes(dest, FileAttributes.Normal); 
+9

我给了'每个人'的文件夹没有成功的完全权限。不知何故,这些文件属性虽然工作。谢谢。我希望MS最终能够建立一个适当的安全模式。试图找出为什么复制/删除每隔几年爆炸至少令人沮丧。 – Steve 2013-01-07 21:43:15

+8

SetAttributes正常是我的诡计 - 我试图File.Copy并覆盖只读文件。 – 2013-02-28 16:51:34

+3

+1!我用'临时',这似乎也适用于我。 – christiandev 2013-10-10 11:44:57

我有同样的问题在共享服务器上的新移动网站上。通过Web主机面板(DotNetPanel)解决设置为“允许写入权限”。因此,如果您在查看所有代码后查看服务器配置,并且可以为您节省大量时间,那么如果您在共享服务器中。

请注意,如果您尝试从代码中访问共享文件夹路径,则不需要通过安全选项卡授予物理文件夹的适当权限。您还需要通过Share选项卡与相应的应用程序池用户“共享”文件夹

这是一个老问题,但我在搜索时遇到了这个问题。原来,我错过了在另存为保存路径的实际文件名部分...

string uploadPath = Server.MapPath("~/uploads"); 
file.SaveAs(uploadPath); // BAD 
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD 
+0

与我的这个答案,我也得到访问被拒绝的错误,你可以帮助https://*.com/questions/49187909/storing-file-by-creating-datefolders-and-saving-inside-it – BNN 2018-03-09 09:26:59

我发现可以,而不是在设计模式下会出现这个错误?执行模式... 如果您正在做某些事情,例如创建需要访问.INI或.HTM文件(配置文件,帮助文件)的类成员,则可能不希望在声明中初始化该项目,而是初始化它后来的Form_Load()等等...... 当你做初始化...使用保护IF语句:

/// <summary>FORM: BasicApp - Load</summary> 
    private void BasicApp_Load(object sender, EventArgs e) 
    { 
     // Setup Main Form Caption with App Name and Config Control Info 
     if (!DesignMode) 
     { 
      m_Globals = new Globals(); 
      Text = TGG.GetApplicationConfigInfo(); 
     } 
    } 

这将保持MSVS设计师从尝试,当你在设计,创造一个INI或HTM文件模式。

检查您的文件属性。如果只读被选中,取消选中它。这是我的UnauthorizedAccessException个人问题。

根据File.Delete Method ...

UnauthorizedAccessException意味着4两件事:

  • 调用方没有所要求的权限。
  • 该文件是一个正在使用的可执行文件。
  • Path是一个目录。
  • 路径指定一个只读文件。
+17

路径是一个目录。尴尬的我:/ – 2017-03-08 09:10:23

+0

昨天发生在我身上* facepalm *。我讨厌这个ambigous例外消息:( – 2017-03-24 15:18:18

+0

我一直在努力超过6小时,并在看到你的回应后,看到该路径是目录...感谢吨@CrazyTim .. – 2017-11-29 00:59:50

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

或者你也可以过时并简单地将身份设置为网络服务,并让网络服务用户访问路径。

当我尝试在移动或创建后非常快速地重命名文件夹时,出现此错误。

一个简单的System.Threading.Thread.Sleep(500);解决它:

void RenameFile(string from, string to) 
{ 
    try 
    { 
     System.IO.File.Move(from, to)  
    } 
    catch 
    { 
     System.Threading.Thread.Sleep(500);  
     RenameFile(from, to);  
    } 
} 
+0

认为如果您在移动文件夹之前检查文件夹是否存在,而不是睡眠半秒钟会更好......如果操作系统繁忙,则先前的移动可能需要半秒多的时间,而您回到相同的问题。 – 2016-06-10 13:28:46

+0

这段代码非常危险。无论抛出什么异常,它都会重复RenameFile方法!如果异常的原因是一个实际的许可问题,它可能会导致应用程序崩溃 – 2016-06-19 05:42:50

右键单击Visual Studio和点击以管理员身份运行

+0

这是我在本地管理员的Windows 8.1企业计算机上针对我的File.Move问题的解决方案,并且没有其他任何文件处理该文件。 – 2016-05-16 21:25:04

我得到的错误,因为我不知道,DEST应该是一个文件。我有一个文件夹作为第二个参数(它在cmd中工作)。我得到了Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.因为c#文件。Move需要一个文件,不仅仅是第一个参数,而是第二个参数,所以如果你把一个目录作为第二个参数,当你有一个名为c:\crp的目录时,它试图写一个像c:\crp这样的文件。

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

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

这同样适用于File.Copy

+0

谢谢!这间接地解决了一个问题,即一个API期望我提供的目录作为目录,而不是意识到它必须包含文件名(因为对象本身有一个关联的文件名)。 – Salgat 2017-10-05 18:29:35

我得到这个错误并解决它在短短的时刻。不知道为什么我的所有文件夹都是只读的,我取消了只读并应用它。但是,它仍然是只读的。所以我将文件移动到根文件夹中,它工作 - 很奇怪。

我面临这个错误,因为

有时,当我Combine路径文件名FileName = ""

它成为Path Directory不是file这是一个问题,因为mentioned above

所以您必须检查FileName这样的

if(itemUri!="") 
     File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));