文件操作中尾部递归的问题(c#)
本文关键字:问题 递归 操作 尾部 文件 | 更新日期: 2023-09-27 18:02:07
我正在编写一个程序来查找计算机上某种类型的所有文件(目前是图像文件),我使用尾部递归以这种方式搜索目录:
private void ImageSearchByDir(DirectoryInfo dir)
{
//search for images by directory, later display them with this method when I get basic search working
foreach (var f in dir.GetFiles())
{
//add file info to current list
this.myfiles.Add(f);
}
foreach (var d in dir.GetDirectories())
{
//recursive call to iterate through subdirectories
ImageSearchByDir(d);
}
}
这个问题似乎在搜索包含大量文件的目录时出现。例如,我搜索了一个文件夹,其中有大约700张图片,分布在3个文件夹下,没有问题,但试图搜索我的桌面时,程序崩溃了。我认为这与递归和由此产生的堆栈大小有关,如果可能的话,我想实现一个更优雅的解决方案(我已经阅读了trampolining,但我不能100%确定这会解决这个问题)。
您可以使用Queue
并这样做:
class ImageSearcher
{
private Queue<DirectoryInfo> found = new Queue<...>();
public void ImageSearchByDir(DirectoryInfo dir)
{
found.Enqueue(dir);
RealSearch();
}
private void RealSearch()
{
while(found.Count > 0)
{
var current = found.Dequeue()
// do your filtering on the current folder
// then add the children directories
foreach(dir in current.GetDirectories())
{
found.Enqueue(dir);
}
}
}
}
这样就没有递归了,如果你觉得这很麻烦