在尝试完成重复文件软件时,我注意到 Directory.GetDirectories() 方法存在问题。当由于某种原因无法访问该文件夹时(大部分时间是由于该文件夹是系统文件夹),循环将停止,因为会引发异常。
经过一些研究试图找出手动进行递归的最佳方法后,我发现Marc Gravell 的示例非常适合我的需求。
我对上述方法的问题是我无法弄清楚如何知道递归方法何时完成处理任何文件/文件夹。因此,我们将不胜感激有关此事的任何见解。
提前致谢。
在尝试完成重复文件软件时,我注意到 Directory.GetDirectories() 方法存在问题。当由于某种原因无法访问该文件夹时(大部分时间是由于该文件夹是系统文件夹),循环将停止,因为会引发异常。
经过一些研究试图找出手动进行递归的最佳方法后,我发现Marc Gravell 的示例非常适合我的需求。
我对上述方法的问题是我无法弄清楚如何知道递归方法何时完成处理任何文件/文件夹。因此,我们将不胜感激有关此事的任何见解。
提前致谢。
操作完成后放一个消息框:
static void Main()
{
string path = ""; // TODO
ApplyAllFiles(path, ProcessFile, FolderProcessed);
MessageBox.Show("Operation complete.");
}
你能澄清你想要做什么吗?
在 Marc 提供的示例代码中,您必须提供将为每个发现的文件调用的操作,因此该操作的调用表示对该文件的处理。
如果您正在寻找一种方法来确定文件夹中的所有文件和子文件夹何时都已被处理,则需要修改代码以添加第二个操作。像这样的东西:
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);
}
}