是否可以在C#中进行不可阻挡的删除?(紧凑框架)
给定一个文件夹,我要确保删除该目录中的所有文件。 我知道可能存在IOExceptions或Access Denied错误,但如何将它们放在一边,继续删除实际上可以删除的文件?这可能吗? 请告诉我从哪里开始 IOExceptions或Access Denied错误,但如何将它们放在一边并继续删除是否可以在C#中进行不可阻挡的删除?(紧凑框架),c#,file-io,compact-framework,delete-file,C#,File Io,Compact Framework,Delete File,给定一个文件夹,我要确保删除该目录中的所有文件。 我知道可能存在IOExceptions或Access Denied错误,但如何将它们放在一边,继续删除实际上可以删除的文件?这可能吗? 请告诉我从哪里开始 IOExceptions或Access Denied错误,但如何将它们放在一边并继续删除 嗯?如果您有IO问题或无法访问这些文件,则无法删除它们。它们是例外。他们告诉你“嘿,这出了问题,原因就在这里”。它们不是礼貌的警告消息,您可以忽略它们,它们是您的删除首先不起作用的原因。如果您循环浏览目录
嗯?如果您有IO问题或无法访问这些文件,则无法删除它们。它们是例外。他们告诉你“嘿,这出了问题,原因就在这里”。它们不是礼貌的警告消息,您可以忽略它们,它们是您的删除首先不起作用的原因。如果您循环浏览目录中的文件并删除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){}
}
}
如果要删除所有可以删除的文件,可以创建一个文件列表(针对子方向递归),然后分别删除它们,跳过引发异常的文件 回答递归搜索问题:
void delete(DirectoryInfo di) {
foreach(DirectoryInfo di2 in di.GetDirectories()) {
delete(di2);
}
foreach(FileInfo fi in di.GetFiles()) {
fi.Delete();
}
}
…正如上面所建议的,尝试…围绕各个部分进行捕获将解决无法删除某些文件的问题。如果您在@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)
{
}
}
它应该会清除空文件夹对不起,我想你误解了我的意思。我想要的是,如果出现异常(这意味着该文件无法删除),请将其放在一边(不要删除),但继续处理其他文件:)我认为是您的标题中的“不可阻挡”部分最让我失望;)不幸的是,无法重载Directory.GetFiles以接受第三个选项SearchOption.AllDirectories in compact framework:(可以通过递归实现,请参见示例:但是如何在所有子目录中递归获取所有文件?Thanx很多:)这就成功了!已删除所有文件:)但未删除空文件夹;)我可以处理空目录:)