给定一个文件夹我想确保删除该目录中的所有文件。 我知道可能有IOExceptions或Access Denied错误,但是如何将它们放在一边并继续删除我实际可以删除的文件?这可能吗? 请让我了解一下我可以从哪里开始。
答案 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)
{
}
}
它应该清空空文件夹