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