如何判断递归方法何时完成

时间:2012-06-30 17:41:06

标签: winforms file recursion directory

在尝试完成重复的文件软件时,我注意到Directory.GetDirectories()方法存在问题。当文件夹因任何原因无法访问时(大部分时间是由于文件夹是系统文件夹),循环将停止,因为会抛出异常。

经过一些研究试图弄清楚手动递归的最佳方法后,我发现Marc Gravell's example完全可以满足我的需求。

我对上述方法的问题是,我无法弄清楚如何知道递归方法何时处理完任何文件/文件夹。因此,任何有关此事的见解都将受到赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在操作完成后放置一个消息框:

static void Main()
{
  string path = ""; // TODO
  ApplyAllFiles(path, ProcessFile, FolderProcessed);
  MessageBox.Show("Operation complete.");
}

答案 1 :(得分:0)

你能澄清你想要做什么吗?

在Marc提供的示例代码中,您必须提供将为发现的每个文件调用的Action,因此调用该操作表示该文件的处理。

如果您正在寻找一种方法来确定何时处理了文件夹中的所有文件和子文件夹,则需要修改代码以添加第二个操作。像这样:

using System;
using System.IO;
static class Program
{
    static void Main()
    {
        string path = ""; // TODO
        ApplyAllFiles(path, ProcessFile, FolderProcessed);
    }
    static void ProcessFile(string path) {/* ... */}
    static void FolderProcessed(string path) {/* ... */}

    static void ApplyAllFiles(string folder, Action<string> fileAction, Action<string> folderProcessed)
    {
        foreach (string file in Directory.GetFiles(folder))
        {
            fileAction(file);
        }
        foreach (string subDir in Directory.GetDirectories(folder))
        {
            try
            {
                ApplyAllFiles(subDir, fileAction);
            }
            catch
            {
                // swallow, log, whatever
            }
        }

        //**** New action invoked here:
        folderProcessed(folder);
    }
}