0

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

4

5 回答 5

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){}
        }
    }
于 2010-08-06T06:35:10.813 回答
3

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

于 2010-08-06T06:36:12.497 回答
2

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

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

于 2010-08-06T06:34:20.847 回答
1

回答递归搜索问题:

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

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

于 2010-08-06T06:55:30.133 回答
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)
            {
            }

        }

它应该清除空文件夹

于 2010-08-06T09:37:55.893 回答