为什么对路径的访问被拒绝?

我有一个问题,我试图删除我的文件,但我得到一个异常。

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

我还应该注意,我试图删除的文件夹拥有对网络服务的完全控制权。

完整的异常消息是:

系统。unauthoredaccessexception:拒绝访问路径“C:\Users\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\temp_loginimages\ environment .jpg”在System.IO.__Error。WinIOError(Int32 errorCode, String maybeFullPath)在System.IO.File。删除hybrid.User_Controls.Imgloader_Add_Edit_Tbl的字符串路径。C:\Users\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\User_Controls\ imgloader_add_edit_tbl.ascxx .cs:第242行:btnUpdate_Click(对象sender, EventArgs e

什么好主意吗?

808607 次浏览

您需要修改要删除/保存到的文件夹的权限。右键单击包含的文件夹,并使用Security选项卡允许运行应用程序的用户拥有修改权限。

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

在这里是关于IIS安全的很好的描述

希望这能有所帮助

在服务器部署后,我也遇到了同样的问题:

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错误或特定类型的安全错误

我撞到了同样的东西。检查以确保文件没有被隐藏。

我也有这个问题,因此我偶然发现了这篇文章。我在Copy / Delete前后添加了以下代码行。

删除

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

复制

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

我在一个共享服务器上新移动的网站上遇到了同样的问题。解决了通过web主机面板(DotNetPanel)设置真“允许写入权限”。因此,如果您使用的是共享服务器,那么在检查所有代码之前,值得查看一下服务器配置,这可以为您节省大量时间。

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

这是一个老问题,但我在搜索时遇到了它。原来我在SaveAs的保存路径中缺少了实际的文件名组件…

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

我发现这个错误可以发生在设计模式,而不是?执行模式…… 如果你正在做一些事情,比如创建一个类成员,需要访问一个.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表示以下四种情况之一:

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

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

或者您可以采用旧的方式,简单地将Identity设置为Network Service,并让Network Service用户访问该路径。

当我试图在移动或创建文件夹后快速重命名文件夹时,抛出了此错误。

简单的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);
}
}

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

谢谢+1

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

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

我面对这个错误是因为

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

它变成了Path Directory而不是file,这和上面提到的一样是个问题

所以你必须像这样检查FileName

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

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

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

我在删除文件时犯了同样的错误。这是一个运行在服务帐户下的Windows服务,即使它拥有共享文件夹的完全控制权,也无法从共享文件夹中删除。pdf文档。

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

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

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

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

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

enter image description here

所以在我的例子中,它是网络服务

然后去文件夹属性检查关联的用户帐户是否也存在于他们的权限选项卡下。它在我的箱子里不见了,当我添加它时,它解决了我的问题。

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

enter image description here

在我的特殊情况下,我反复创建和删除10000个文件夹。在我看来,问题在于尽管Directory.Delete(path, true)方法返回,但底层操作系统机制可能仍然在从磁盘删除文件。当我在删除旧文件夹后立即开始创建新文件夹时,其中一些文件夹仍然处于锁定状态,因为它们还没有完全删除。我得到的是系统。UnauthorizedAccessException:“对路径的访问被拒绝”。

enter image description here

Directory.Delete(path, true)之后使用Thread.Sleep(5000)解决了这个问题。我完全同意这是不安全的,我不鼓励任何人使用它。我想有一个更好的方法来解决这个问题,以提高我的答案。现在我只是想说明为什么会出现这种异常。

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

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

C:\folderpath

会很好,但是,

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

将会给出访问拒绝错误。

我也有同样的问题, 我指的是文件夹而不是文件。< / p >

确保在path中,给path+filename

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

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

它没有工作,因为我只是传递OpenWrite()一个路径到一个目录,但它需要一个路径一直到你想写的文件。包含文件名的完整路径。扩展在最后需要传递到OpenWrite,以避免unauthoredaccessexception

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

  • 安装位置
  • 你的AppData位置
  • 通过文件文件夹选择器选择的文件
  • 在您的应用程序清单中请求的位置

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

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

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

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

我也在这篇文章中遇到了同样的问题。看起来该文件正在使用,因此无法向其写入。 虽然无法确定是哪个进程在使用它。签出了在该框中登录的其他用户,看不到任何用户持有它。 关于如何找到相同的任何快速提示。

< p >谢谢, Lakshay(开发人员)< / p >

我的问题是诺顿。我的内部程序没有正确的数字签名,当它试图删除一个文件时,它给出了未经授权的accessexception异常。

enter image description here

如果它给你一个通知,你可以从那里处理它。在我的情况下,它没有给我注意到的通知。下面是防止诺顿阻止程序的方法。

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

为了解决这个问题,我在调试系统。unauthoredaccessexception(通常后跟:拒绝访问该路径)文章中遵循了Scot Hanselman的方法,带示例的代码如下:

class Program
{
static void Main(string[] args)
{
var path = "c:\\temp\\notfound.txt";
try
{
File.Delete(path);
}
catch (UnauthorizedAccessException)
{
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
attributes &= ~FileAttributes.ReadOnly;
File.SetAttributes(path, attributes);
File.Delete(path);
}
else
{
throw;
}
}
}
}

在我的情况下,是我的AVG杀毒软件触发了异常。

我把我的VS项目目录添加到&;允许&;列表。在我将.exe复制到我的App目录后,我必须将可执行文件添加到AVG异常列表中。

我也遇到过同样的问题,我通过改变文件保存的分区来设法让它工作。因此,在第5行,我修改了@" C:\"是@"D:\"这样问题就解决了。

static void SaveVideoToDisk(string link)
{
var youTube = YouTube.Default; // starting point for YouTube actions
var video = youTube.GetVideo(link); // gets a Video object with info about the video
File.WriteAllBytes(@"D:\" + video.FullName, video.GetBytes());
}

Visual Studio 2017迁移到Visual Studio 2019后,我的两个应用程序在Visual Studio 2017下正常运行时遇到了两个异常:

  • 系统。UnauthorizedAccessException
  • 系统。ArgumentException

事实证明,我必须将两个应用程序的可执行文件添加到Avast Antivirus的允许应用程序中。