访问被拒绝错误

时间:2010-02-23 14:06:49

标签: 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.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;
    }
}

请指导.........

- ********************************************** ************************* 还有问题。它没有解决。获取UnauthorizedAccessException。因访问被拒绝删除文件。我现在累了。请帮忙;我尝试过很多东西..请帮忙 - ******************* ********************** 可能是VSS的iffect?我正在使用那个

10 个答案:

答案 0 :(得分:11)

UPDATE:

您的部分问题可能是保存/创建此文件。如果您使用内置的“保存”或“另存为”功能,则基础文件流可能仍会锁定文件。使用FileStream语句中包含的Using编写自己的保存逻辑将有助于在完成后立即处理流,从而允许您在同一上下文中进一步操作文件。

如果flUpldSelectFile.SaveAs(strCreateXLFileDestinationPath);是保存文件的唯一逻辑,那么摆脱内置的SaveAs功能。使用包含在FileStream块中的Using编写自己的保存逻辑。

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

using (FileStream fs = new FileStream(strCreateXLFileDestinationPath, FileMode.Create))
{        
    byte[] buffer = flUpldSelectFile.FileBytes;
    fs.Write(buffer, 0, buffer.Length);
}

如前所述,使用此工具查明另一个进程是否存在对文件的锁定。

ORIGINAL

弹出这个奇妙的工具并搜索该文件以查看锁定的人/内容

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx alt text http://i.technet.microsoft.com/bb896653.ProcessExplorer(en-us,MSDN.10).jpg

答案 1 :(得分:4)

如果您的代码在IIS下运行,请注意ASPNET用户无权访问计算机文件,您应该访问它,不建议这样做,或者将文件存储在ASPNET用户可以访问的位置

请参阅here

答案 2 :(得分:3)

尝试这两个步骤的组合:

  1. 将IIS应用程序池设置为在具有域帐户或本地用户帐户(不是默认帐户,如本地服务或本地系统)等帐户的帐户下运行。 Instructions for IIS7
  2. <system.web>部分的web.config文件中启用模拟:
    <identity impersonate="true"/>

    <identity impersonate="true" userName="contoso\Jane" password="password"/>

答案 3 :(得分:2)

我认为该消息很明确,您无权删除该文件或由其他应用程序打开。我打赌2 $你也不能手动删除文件。

答案 4 :(得分:2)

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

您需要做的是让ASPNET用户访问特定文件夹。您可以从文件夹属性中的安全选项卡执行此操作。您需要完全控制的用户取决于您使用的IIS版本。在Windows XP中它是ASPNET。在Windows Server 2003,2008和Windows Vista中,7是NETWORK_SERVICE。

有关详细信息,另请参阅此question

答案 5 :(得分:1)

确保未打开文件或    被另一个用户/进程锁定。

答案 6 :(得分:1)

确保ASPNET用户可以访问文件\文件夹(使用Windows资源管理器检查文件\文件夹的属性并转到安全选项卡。检查是否添加了ASPNET用户。)

答案 7 :(得分:1)

正在发生两件事之一。文件已经打开,或者运行IIS的用户的权限没有适当的权限。

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

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

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

答案 8 :(得分:0)

您是否确认该文件没有设置只读属性?

答案 9 :(得分:0)

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