C# 拒绝访问错误

C# 拒绝访问错误,c#,.net,asp.net,C#,.net,Asp.net,我正在尝试从特定位置删除excel文件。但不能删除。有错误: 对路径“C:\mypath\sample.xlsx”的访问被拒绝 我将代码编写为: protected void imgbtnImport_Click(object sender, ImageClickEventArgs e) { try { string strApplicationPath = HttpContext.Current.Request.MapPath(HttpContext.Curr

我正在尝试从特定位置删除excel文件。但不能删除。有错误:

对路径“C:\mypath\sample.xlsx”的访问被拒绝

我将代码编写为:

protected void imgbtnImport_Click(object sender, ImageClickEventArgs e)
{

    try
    {
        string strApplicationPath = HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath);
        string strXLStoredDirectoryPath = strApplicationPath + "/Information Documents/";
        DirectoryInfo di = new DirectoryInfo(strXLStoredDirectoryPath);
        string fileName = flUpldSelectFile.FileName;
        if (!File.Exists(strXLStoredDirectoryPath))
        {
            Directory.CreateDirectory(strXLStoredDirectoryPath);

            di.Attributes = FileAttributes.Normal;
        }
        string strCreateXLFileDestinationPath = strXLStoredDirectoryPath + fileName;
        if (File.Exists(strCreateXLFileDestinationPath))
        {
            File.Delete(strCreateXLFileDestinationPath);
        }

        flUpldSelectFile.SaveAs(strCreateXLFileDestinationPath);           
        di.Attributes = FileAttributes.ReadOnly;
    }
    catch (Exception)
    {            
        throw;
    }
}
请引导

-***********************************************************************
还是有问题。它还没有解决。正在获取未经授权的访问异常。由于删除文件的访问被拒绝。我现在累了。请帮忙;我试过很多东西,请帮忙 -***********************************************************************
这可能是VSS的问题吗?我使用的是

我认为信息很清楚,您没有删除该文件的权限,或者该文件已被其他应用程序打开。我打赌2美元你也不能手动删除文件。

如果你的代码在IIS下工作,请注意,ASPNET用户没有访问计算机文件的权限,你应该授予访问权限,这是不推荐的,或者将你的文件存储在ASPNET用户有权访问的地方


请参见

确保未打开或删除该文件 被其他用户/进程锁定。

更新: 问题的一部分可能是保存/创建此文件的内容。如果您使用的是内置的“Save”或“SaveAs”功能,则底层文件流可能仍会锁定该文件。使用语句编写自己的保存逻辑,并将
FileStream
封装在
中,这将有助于在完成后正确处理流,从而允许您在相同的上下文中进一步操作文件

如果
flUpldSelectFile.SaveAs(strCreateXLFileDestinationPath)
是保存文件然后放弃内置的
SaveAs
功能的唯一逻辑。使用
块将
文件流
包装在
中,编写您自己的保存逻辑

在您的示例中,我看不到flUpldSelectFile是什么,所以我假设它是System.Web.UI.WebControl.FileUpload控件。下面是一个滚动您自己的保存逻辑的示例

using (FileStream fs = new FileStream(strCreateXLFileDestinationPath, FileMode.Create))
{        
    byte[] buffer = flUpldSelectFile.FileBytes;
    fs.Write(buffer, 0, buffer.Length);
}
如前所述,使用此工具可以查明文件是否被其他进程锁定

起初的 打开这个很棒的工具,搜索那个文件,看看谁/什么东西被锁定了



(来源:)

确保ASPNET用户有权访问文件\文件夹(使用windows资源管理器检查文件\文件夹的属性,并转到“安全”选项卡。检查是否在其中添加了ASPNET用户)。

正如其他人所说,这是因为IIS以具有受限访问权限的用户身份运行您的应用程序。这是一个明智的安全预防措施,因此您的系统不易受到恶意攻击

您需要做的是为ASPNET用户提供对特定文件夹的访问权限。您可以从文件夹属性中的“安全”选项卡执行此操作。您需要给予完全控制权的用户取决于您使用的IIS版本。在Windows XP中,它是ASPNET。在WindowsServer2003、2008和WindowsVista中,7它是网络服务


有关更多详细信息,请参见此部分。

发生了两件事中的一件。文件已打开,或者运行IIS的用户的权限没有正确的权限

无论哪种方式,此实用程序ProcMon: 将帮助您确定问题。运行ProcMon,启动进程以尝试删除该文件。然后回到procmon。按Ctrl-E关闭捕获,然后按Ctrl-F查找。输入要删除的文件的名称。然后,一旦您找到了正确的、访问被拒绝(或类似错误)的行,双击该行以获取更多信息。当您单击“进程”选项卡时,它将显示尝试删除文件的确切用户

因此,如果是文件权限问题,您现在知道确切的用户,因此可以在文件系统中右键单击包含您试图删除的文件的文件夹,并授予该用户读取/写入/更新该文件夹的权限


第二,如果文件被锁定打开,而不是权限问题,那么您必须找出是什么进程使文件保持打开状态。如果您还在代码的另一部分中编写此文件,则可能您没有正确关闭它或释放对象引用。

请尝试以下两个步骤的组合:

  • 将IIS应用程序池设置为在具有域帐户或本地用户帐户(不是本地服务或本地系统等默认帐户)等权限的帐户下运行
  • 在web.config文件的
    部分中打开模拟:


  • 您是否已验证该文件未设置只读属性?

    我认为我们没有足够的信息提供帮助。调用Delete期间的安全上下文(标识)是什么?应用程序是否模拟最终用户?如果是,他们是如何认证的?如果使用Windows/Active Directory,则需要验证该用户对特定文件的访问权限。如果通过表单登录,则可能不应模拟并验证AppPool的安全上下文是否具有适当的访问权限。

    是否正确设置了文件系统设置?您必须设置这些选项才能执行删除等操作。我们需要知道这是否是asp.net应用程序。您是否尝试使用我建议的工具查看文件是否被锁定?也是什么创建了这个文件?如果是同一应用程序,请显示创建/保存文件的代码。我已经遇到过很多次了,并且能够相当快地诊断出它,匈牙利符号!我的眼睛!是的,如果它是一个权利问题文件。Exists将返回false。有人将其锁定。您将丢失,可能是服务器正在另一个凭据中工作;)这是一个asp.net项目我想是的。。。但我认为这是我在背后进行的一个过程。。。可能是这个原因。@ArsenMkrt关于ASP.Net,您可能是对的,我没有注意到
    HttpContext.Current.Request.MapPath()
    调用。关于aut,我可能仍然是对的