English 中文(简体)
删除目录
原标题:Deleting a directory
  • 时间:2010-10-06 16:13:45
  •  标签:
  • 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();
    }
}

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

请告诉我我做错了什么。

Server: win2008 web edition ASP.NET: 4

最佳回答

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

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

有时我在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
    }
}
问题回答

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

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

也许是代码示例此处将为您指明正确的方向。您需要在模拟上下文下运行,才能作为该用户执行操作。

您知道,我将不再捕获一般的SystemException,而是捕获Delete方法将抛出的一些特定异常。它可能有助于调试这样的问题。

如果你这样做了,请原谅我,但是:

1) 你能用单元测试来测试你用来删除目录的方法吗?确保删除代码在使用测试的计算机上本地运行时能够正常工作。

2) 您可能被拒绝的原因是文件正在使用中。如果前一篇文章中的index.asp文件是由IIS启动的,那么它可能仍在使用中,因此不想被删除。如果IIS掌握了您的文件,那么您将需要停止IIS服务或等待其发布。

3) 这些文件是只读的吗?

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

另一方面。。。为什么不在数据库中引用这些文件,并进行软删除?看到它的网页,用户将无法分辨。让DB告诉应用程序允许您查看哪些文件。这样数据丢失的可能性就很低。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签