是否有可能在C#中进行不可阻挡的删除? (紧凑框架)

时间:2010-08-06 06:32:57

标签: c# file-io compact-framework delete-file

给定一个文件夹我想确保删除该目录中的所有文件。 我知道可能有IOExceptions或Access Denied错误,但是如何将它们放在一边并继续删除我实际可以删除的文件?这可能吗? 请让我了解一下我可以从哪里开始。

5 个答案:

答案 0 :(得分:3)

如果您遍历目录中的文件并删除try / catch中的每个文件,则即使在异常之后也可以继续。如果您尝试删除整个目录,那么一旦失败就会失败。

编辑:按要求编写的代码

private void DeleteFiles(DirectoryInfo Directory)
    {
        bool AllFilesDeleted = true;
        foreach(FileInfo oFile in Directory.GetFiles())
        {
            try
            {
                oFile.Delete();
            }
            catch (Exception ex) { AllFilesDeleted = false; }
        }
        foreach (DirectoryInfo oDirectory in Directory.GetDirectories())
        {
            DeleteFiles(oDirectory);
        }

        if (AllFilesDeleted)
        {
            try
            {
                Directory.Delete();
            }
            catch (Exception ex){}
        }
    }

答案 1 :(得分:3)

如果要删除可以删除的所有文件,可以创建一个文件列表(递归查找子文件),然后单独删除它们,跳过引发异常的文件。

答案 2 :(得分:2)

  

IOExceptions或Access Denied错误但是如何将它们放在一边并继续删除

咦?如果您遇到IO问题或者您无法访问这些文件,则无法删除它们。他们是例外。他们告诉你“嘿,这出错了,这就是为什么”。它们不是您可以忽略的礼貌警告消息,它们是原因您的删除首先不起作用。

答案 3 :(得分:1)

回答递归搜索问题:

void delete(DirectoryInfo di) {
 foreach(DirectoryInfo di2 in di.GetDirectories()) {
  delete(di2);
 }
 foreach(FileInfo fi in di.GetFiles()) {
  fi.Delete();
 }
}

...如上所述,尝试......抓住各个部分将无法删除某些文件。

答案 4 :(得分:0)

如果你在@Will A建议中改变了一下这个顺序,并添加一行来删除目录本身 - 它应该可以解决问题。像

这样的东西
        static void delete(DirectoryInfo di)
        {
            foreach (FileInfo fi in di.GetFiles())
            {
                try
                {
                    fi.Delete();
                }
                catch (Exception)
                {

                }
            }

            foreach (DirectoryInfo di2 in di.GetDirectories())
            {
                delete(di2);
            }
            try
            {
                di.Delete();
            }
            catch (Exception)
            {
            }

        }

它应该清空空文件夹