删除目录

时间:2010-10-06 16:13:46

标签: c# asp.net

我在删除目录时遇到了一些重大问题。我正在构建一个ADMIN工具来删除我的客户创建的目录,然后要求删除它们。你会认为这很简单:


using (var context = Impersonator.LogOn(user, password, domain))
{
    try
    {
        dir = new DirectoryInfo(path);
        dir.Delete(true);
    }
    catch (Exception ex)
    {
        return string.Format("Error:{0}", ex.Message);
    }
    finally
    {
        context.Undo();
    }
}

现在无论我做什么我都无法删除文件夹。响应总是“拒绝访问路径”。我已经加倍检查路径,登录所有内容。

请告诉我我做错了什么。

服务器:win2008网络版 ASP.NET:4

5 个答案:

答案 0 :(得分:1)

我最近解决了这个相同的问题,首先删除文件夹中的所有文件,然后删除文件夹。

对我而言,有关访问的错误消息具有误导性。

有时我在Windows资源管理器中删除文件时也遇到此问题。偶尔,它会删除目录,直到删除其中的文件为止。我从来没有想过为什么。

这是我的代码:

private static void FileCleanup(string directoryName)
{
    try
    {
        string[] filenames = Directory.GetFiles(directoryName);

        foreach (string filename in filenames)
        {
            File.Delete(filename);
        }

        if (Directory.Exists(directoryName))
        {
            Directory.Delete(directoryName);
        }
    }
    catch (Exception ex)
    {
       // you might want to log it, or swallow any exceptions here
    }
}

答案 1 :(得分:0)

错误消息说明了一切。 “拒绝访问路径” - >您正在运行的进程可能没有该文件夹的权限

编辑:或正在使用某些文件...

答案 2 :(得分:0)

也许代码示例here会指向正确的方向。您需要在模拟上下文中运行才能以该用户身份执行操作。

答案 3 :(得分:0)

你知道,我将摆脱捕获泛型SystemException,而是捕获Delete方法将抛出的一些特定异常。它可能有助于调试这样的问题。

答案 4 :(得分:0)

请原谅我,但是:

1)您是否可以使用单元测试来测试用于删除目录的方法?使用测试在您的计算机上本地运行时,确保删除代码有效。

2)您可能被拒绝的原因是因为文件正在使用中。如果以前的帖子之一中的index.asp文件是由IIS启动的,那么它仍然可以使用,因此不希望被删除。如果IIS有你的文件,那么你需要停止IIS服务或等到它发布。

3)文件是否只读?

4)确保您使用的是物理路径,而不是只有IIS可以理解的相对路径。删除文件/目录将无法理解虚拟目录。

另一个注意事项......为什么不在数据库中引用这些文件,并进行软删除?看到它的网络,用户将无法分辨。让DB告诉应用程序您可以看到哪些文件。这样,数据丢失的可能性很小。

相关问题