所以,我正在做一个简单的扫描来获取硬盘驱动器上所有文件夹的列表(c:\windows 和 c:\windows\system32 被认为是单独的条目)。如果我想为这个 1-2 分钟的任务提供进度条,我该怎么做?也就是说,我知道如何制作进度条,但不确定如何确定完成了多少工作。
编辑:请注意,执行预扫描不是解决方案,因为此扫描仅获取文件夹列表,而预扫描将花费同样长的时间。
代码示例如下。在我的系统上运行干净需要不到 2 分钟,但由于磁盘访问缓存,第二次运行不到 10 秒。我已经创建了基于堆栈而不是基于递归的变体。
我发现一种可能不是 100% 可靠但比我的扫描快得多的机制是将“dir/s/ab/b”通过管道传输到我的程序并计算换行符的实例。Dir 做了某种魔法,比我的程序扫描我的 HD 做得更好,但我不知道那个魔法是什么。
class Program
{
static void recurse(string pos)
{
DirectoryInfo f = new DirectoryInfo(pos);
try
{
foreach (DirectoryInfo x in f.GetDirectories("*"))
{
recurse(x.FullName);
}
} catch (Exception) {}
}
static void Main(string[] args)
{
recurse("c:\\");
}
}