为什么访问路径被拒绝?

问题描述 投票:134回答:26

我有在那里我想删除我的文件有问题,但我得到一个异常。

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 .__ Error.WinIOError(的Int32的errorCode,字符串maybeFullPath)在System.IO.File.Delete(字符串路径)在hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(对象发件人,EventArgs e)如C:\用户\ gowdyn \文档\ Visual Studio 2008的\项目\混合\混合\ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs:线242

有任何想法吗?

c# asp.net io unauthorizedaccessexcepti
26个回答
174
投票

我也有这个问题,所以我磕磕绊绊对这个职位。我添加下面的代码行之前和之后进行复制/删除。

删除

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

复制

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

2
投票

我得到这个错误并解决它在短短的时刻。不知道为什么我所有的文件夹是只读的,我取消了只读和应用它。然而,它仍然是只读的。让我感动的文件到根文件夹,它的工作原理 - 太奇怪了。


2
投票

当操作系统拒绝,因为I / O错误或安全错误的访问的UnauthorizedAccessException异常被抛出。

如果您试图访问一个文件或注册表项,确保它不是只读的。


2
投票

我也面临这个问题时,我的窗口服务开始抛出异常

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.

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

enter image description here

所以在我的情况下,它是NETWORK SERVICE

然后就到了文件夹属性,以检查是否关联的用户帐户还他们的许可选项卡下存在。它缺少我的情况,当我加入它,它固定我的问题。

欲了解更多信息,请查看下面的屏幕截图

enter image description here


2
投票

我同样的问题也一样,我指着文件夹,而不是文件。

所以一定要确保在道路,给路径+文件名

System.IO.File.WriteAllBytes("path", bytearray);

1
投票

我有一个共享服务器上的一个新的移动网站上的同样的问题。通过虚拟主机面板(DotNetPanel)设置真正的“允许写权限”解决。所以,如果你是在一个共享服务器检查所有代码值得考虑看看服务器配置前,可以为您节省大量的时间。


1
投票

请注意,如果你想从你的代码达到一个共享文件夹的路径,你不要只需要提供正确的权限physicial文件夹直通安全选项卡。您还需要有相应的应用程序池的用户直通共享选项卡“共享”的文件夹


1
投票

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


1
投票

我面临这个错误的原因

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

它成为Path Directory不是file这是mentioned above问题

所以你必须检查是否有这样的FileName

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

1
投票

删除文件时,我有确切的错误。这是其无法从共享文件夹删除文档的.pdf即使有文件夹的完全控制服务帐户下运行Windows服务。

什么工作对我来说是浏览到共享文件夹>高级>共享的安全选项卡>添加。

然后我加入了服务帐户添加到管理员组,应用的变化和服务帐户然后能在该文件夹中的所有文件执行所有操作。


1
投票

如果您使用的BitDefender有一个很好的机会,它的安全文件功能阻止您的操作。这是勒索保护的一种形式,带有一些更高级的版本。

确保授予BitDefender的应用程序访问,然后重试。

更多的细节可以在this BitDefender support page找到。


150
投票

File.Delete Method ...

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

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

0
投票

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

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中另一组包括管理员,我的问题得到有效解决。


0
投票

我发现,可相对于在设计模式中会出现这个错误?执行模式...如果你正在做的事情,比如创建需要访问一个.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文件。


0
投票

当我试图文件夹非常迅速重命名后它已被移动或创建我有这个错误抛出。

一个简单的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
投票

在我的具体情况我曾多次创建和删除文件夹10000。在我看来,问题是,虽然Directory.Delete(path, true)返回方法,下属OS机制仍可以从磁盘上删除文件。而当我开始旧的删除后立即创建新文件夹,其中的一些仍被锁定,因为他们还没有完全删除。而我得到System.UnauthorizedAccessException的:“对路径的访问被拒绝”。

enter image description here

使用Thread.Sleep(5000) Directory.Delete(path, true)解决了这个问题之后。我完全同意,这是不是安全的,我不鼓励任何人都可以使用它。我喜欢在这里更好的方法来解决这个问题,以提高我的答案。现在,我只给一个想法,为什么这个异常可能发生。

class Program
{
    private static int numFolders = 10000;
    private static string rootDirectory = "C:\\1";

    static void Main(string[] args)
    {
        if (Directory.Exists(rootDirectory))
        {
            Directory.Delete(rootDirectory, true);
            Thread.Sleep(5000);
        }

        Stopwatch sw = Stopwatch.StartNew();
        CreateFolder();
        long time = sw.ElapsedMilliseconds;

        Console.WriteLine(time);
        Console.ReadLine();
    }

    private static void CreateFolder()
    {
        var one = Directory.CreateDirectory(rootDirectory);

        for (int i = 1; i <= numFolders; i++)
        {
            one.CreateSubdirectory(i.ToString());
        }
    }
}

0
投票

首先只检查路径是否冒号(:)字符的驱动器盘符后丢失或未。如果冒号是不缺的,那么你可以检查是否访问/写权限被授予该路径。我有同样的问题,我只是缺少冒​​号,许可和其他一切都很好。

C:\folderpath

将正常工作,但是,

C\folderpath .........(missing colon)

会给你访问拒绝错误。


0
投票

我试图用System.IO.File.OpenWrite(路径)

它没有工作,因为我只是路过OpenWrite(),以目录的路径,但它需要一个路径一路要写入文件。因此,需要传递到OpenWrite避免UnauthorizedAccessException包括在年底filename.extension完整路径


0
投票

对于那些试图使UWP(通用的Windows)应用程序,文件权限是很大的限制,一般默认是Deny。它也取代了系统的用户权限。你会基本上只在访问文件或者

  • 您的安装位置
  • 您的应用程序数据的位置
  • 选择通过FileFolder选择器文件
  • 在您的应用清单要求的位置

您可以为细节在这里阅读更多=> https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions


-1
投票

我也遇到了这个岗位作为处理同样的问题。貌似文件正在使用,因此不能写入。虽然没能弄明白,哪些进程正在使用它。签名是谁在那个盒子登录其他用户,没有看到是谁在持有它的任何用户。任何快速提示关于如何找到相同。

谢谢,目标(开发者)


26
投票

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

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

17
投票

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

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

希望这可以帮助


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


10
投票

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


6
投票

如果这是有问题的IIS网站,检查该网站或应用程序使用的应用程序池的高级设置标识属性。你可能会发现,它被设置为ApplicationPoolIdentity,在这种情况下,那么这是一个将要访问路径的用户。

或者你可以去老风格和简单的设置标识为网络服务,并给予路径的网络服务的用户访问。


3
投票

您需要修改该文件夹的你试图删除/保存的特权。在包含文件夹右键单击,并使用安全选项卡允许修改您的应用程序下运行的用户权限。


3
投票

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

我打的是同样的事情。检查以确保该文件不是隐藏的。

© www.soinside.com 2019 - 2024. All rights reserved.