这段代码非常适合清除IECache,但它似乎应该永远循环...为什么不呢? 结果只是输出已删除和未删除的文本框。
感谢您的回答......
public void delIECache(RichTextBox results)
{
results.Text += "Deleting IE Cache" + "\n";
DirectoryInfo IECache = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache));
MessageBox.Show(IECache.ToString());
this.ClearFolder(IECache,results);
}
public void ClearFolder(DirectoryInfo diPath,RichTextBox results)
{
foreach (FileInfo fiCurrFile in diPath.GetFiles())
{
try
{
fiCurrFile.Delete();
results.Text += " " + fiCurrFile + " Successfully Deleted \n";
}
catch
{
results.Text += " " + fiCurrFile + " Not Deleted \n";
}
}
foreach (DirectoryInfo diSubFolder in diPath.GetDirectories())
{
ClearFolder(diSubFolder,results);
}
答案 0 :(得分:2)
因为在正常情况下,您最终会点击没有子文件夹的文件夹,并且递归的那些分支将结束。
它可能永远运行的一种方式(从未尝试过,但理论上听起来可能)是你有symbolic links的循环文件夹。
答案 1 :(得分:0)
diPath.GetFiles()仅在循环开始时执行一次,而不是每次迭代都执行一次。
答案 2 :(得分:0)
它是递归的,但最终它会在到达每个子目录的末尾时结束。 维基百科在这方面有太多的信息,但有一些关于递归编程的详细解释:http://en.wikipedia.org/wiki/Recursion_(computer_science)
答案 3 :(得分:0)
我不知道C#,但是当没有更多子目录时,就会出现递归的基本情况。在这种情况下,您不要调用ClearFolder。
答案 4 :(得分:0)
“foreach”不是面向流的。它只关注集合中当前的内容。你需要“永远”保持这种运行吗?
答案 5 :(得分:0)
它递归地遍历所有文件夹及其子文件夹,但除非存在循环关系(你的文件夹树中没有),否则你将到达文件夹树的底部一点。这一点是递归停止并且方法退出
答案 6 :(得分:0)
看起来像是正确的循环。但也许你有巨大的IE缓存,需要很长时间(几分钟)来逐个文件删除它。
答案 7 :(得分:0)
如果此目录仅包含有限数量的文件,则它不会永远循环。 唯一可以循环的方法是,如果至少有一个目录包含引用自身的硬链接/结点或直接或间接包含该目录的目录。
处理完所有文件和所有子文件夹后,方法就完成了。当且仅当当前目录具有子目录时,该方法才会调用自身。
答案 8 :(得分:0)
说我有以下目录树:
IECache
|- IECache1
|- IECache1a
|- IECache2
|- IECache3
这些都是目录,因为这里的文件并不重要。
ClearFolder
DirectoryInfo
对象调用IECache
ClearFolder
DirectoryInfo
对象调用IECache1
ClearFolder
DirectoryInfo
对象调用IECache1a
ClearFolder
ClearFolder
DirectoryInfo
对象调用IECache2
ClearFolder
DirectoryInfo
对象调用IECache3
ClearFolder
delIECache