gpt4 book ai didi

file - 扫描硬盘时的进度条

转载 作者:行者123 更新时间:2023-12-02 00:33:30 26 4
gpt4 key购买 nike

因此,我正在进行简单扫描以获取硬盘驱动器上所有文件夹的列表(c:\windows 和 c:\windows\system32 被视为单独的条目)。如果我想为这个 1-2 分钟的任务提供进度条,我该怎么做?也就是说,我知道如何制作进度条,但不确定如何确定它完成了多少工作。

编辑:请注意,执行预扫描并不是解决方案,因为此扫描仅获取文件夹列表,而预扫描也需要同样长的时间。

代码示例如下。在我的系统上运行干净需要不到 2 分钟,但由于磁盘访问缓存,第二次运行需要不到 10 秒。我已经创建了基于堆栈而不是基于递归的变体。

我发现的一种机制可能不是 100% 可靠,但比我的扫描快得多,即将“dir/s/ab/b”通过管道传输到我的程序并计算换行符的实例。 Dir 执行了某种魔法,可以比我的程序更好地扫描我的硬盘,但我不知道那个魔法是什么。

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:\\");
}
}

最佳答案

如果您需要制作进度条,并且无法抽出时间来收集准确的信息,那么您将无法制作完美的进度条。考虑到这一假设,您仍然可以制作一个并非完全不准确的进度条。

例如,您创建一个函数,根据当前目录中的子目录数量分割进度条。因此,如果您的根目录有 10 个子目录,请将进度条的 10% 分配给每个目录。然后,进入第一个子目录并统计其子目录。如果有 5 个,则将进度条前 10% 的 20% 分配给每个进度条(总进度条的 2%)。继续这样,直到到达一个没有子目录的目录,在那里进行处理并增加进度条,无论它代表的小数部分。

进度条上的每个 % 并不代表算法完成的相同工作量,但考虑到您的限制,我怀疑您可以做得更好。

关于file - 扫描硬盘时的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com