IT-Swarm.Net

为什么拒绝访问路径?

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

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:\ 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行

有任何想法吗?

134
nick gowdy

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

删除

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

复制

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

根据 File.Delete方法 ...

UnauthorizedAccessException表示以下四种情况之一:

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

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

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

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

这里 是关于IIS安全性的非常好的描述答案

希望这可以帮助

17
Arsen Mkrtchyan

我收到了错误,因为我没有意识到目标应该是一个文件。我有一个文件夹作为第二个参数(在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也是如此

9
barlop

右键单击Visual studio并单击 以管理员身份运行

8
Alexander Zaldostanov

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

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

6
Bjørn Otto Vasbotten

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

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

3
user1209939

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

2
MOLLMY

您需要修改您尝试从中删除/保存到的文件夹的权限。右键单击包含文件夹,然后使用“安全”选项卡为您的应用程序运行的用户允许 modify rights。.

2
Brissles

对我来说同样的问题,我指的是文件夹而不是文件。.

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

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

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

1
Kacho

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

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

1
reza.Nikmaram

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

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

1
Jitender Kumar

删除文件时我遇到了确切的错误。它是在服务帐户下运行的Windows服务,即使它具有对文件夹的完全控制权,也无法从共享文件夹中删除.pdf文档。.

对我有用的是导航到共享文件夹>高级>共享>添加的安全选项卡。.

然后,我将服务帐户添加到管理员组,应用更改,然后服务帐户就可以对该文件夹中的所有文件执行所有操作。.

1
LuTheZy

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

1
user3238433

我在共享服务器上新移动的网站上遇到了同样的问题。通过Web Host面板(DotNetPanel)解决设置为“允许写入权限”。因此,如果您在查看所有代码之前都在共享服务器中,请查看服务器配置并节省大量时间。.

1
Drakell

我正面临这个错误,因为

有时我Combine path with 文件名 FileName = ""

它成为Path Directory而不是file这是一个问题 如上所述

所以你必须像这样检查FileName

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
1
Basheer AL-MOMANI

在我的特殊情况下,我反复创建和删除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
Aleksei Mialkin

首先检查路径是否在驱动器号后面缺少冒号(:)字符。如果冒号没有丢失,则可以检查是否为该路径授予了访问/写入权限。我有同样的问题,我只是错过了冒号,许可,其他一切都很好。.

C:\folderpath

会工作正常,但是,

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

会给你访问拒绝错误。.

0
Vijay Dodamani

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

确保在BitDefender中授予您的应用程序访问权限,然后重试。.

更多细节可以在 这个BitDefender支持页面中找到 。.

0
Vlad Schnakovszki

我发现这个错误可能发生在DESIGN MODE而不是?执行模式...如果您正在执行某些操作,例如创建需要访问.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 Designer在设计模式下不会尝试创建INI或HTM文件。.

0
Terry

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

并且它不起作用,因为我只是将OpenWrite()传递给目录的路径,但它需要一个路径到你想要写的文件。因此,包含最终filename.extension的完整路径需要传递到OpenWrite以避免UnauthorizedAccessException

0
SeanMC

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

一个简单的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
Arjan de Bruijn

在服务器上部署后尝试执行此操作时,我也遇到了同样的问题:

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
Manish Singh

对于那些试图制作UWP(通用Windows)应用程序的人来说,文件权限受到更多限制,一般来说默认是拒绝。它还取代了系统用户权限。您基本上只能访问其中的文件

  • 您的安装位置
  • 您的AppData位置
  • 通过 FileFolder picker选择的文件
  • App Manifest中要求的位置

你可以在这里阅读更多详情=> https://docs.Microsoft.com/en-us/windows/uwp/files/file-access-permissions

0
Tezra