我必须在我的AV中添加一个进度条,问题是我事先不知道要扫描多少文件。所以我不知道总计数。如果算上要扫描的文件,然后软暂停一段时间,因为它必须通过许多文件,并且在全系统扫描的情况下,这个暂停,如果持续时间很长,这是不希望的。因此我删除了该代码。我听说avast动态地改变进度条值即ie如果值接近100并且发现更多文件扫描,那么它将值推到类似50.Coding在C#中。
答案 0 :(得分:1)
只计算5级深度的文件夹,并根据扫描的文件夹数量计算进度。增加部门以提高准确性(以预计算时间为代价)。使用本文了解如何尽快枚举目录:MSDN How to: Enumerate Directories and Files
答案 1 :(得分:1)
在更新UI之前尝试获取所有文件的列表是愚蠢的。
使用线程;一个用于查找文件并将其位置添加到队列中,并更新总文件数。
另一个进行扫描,并更新扫描文件的数量。
并且UI线程将基于此更新自身;所以上限会不断增加......或者变得更加准确。
答案 2 :(得分:0)
我建议检查磁盘上占用的空间大小,并根据密度评估文件数:每GB文件数。首先,您必须假设一个GB中存储了多少文件(对于我的系统,它是3860)在扫描期间,您将知道扫描硬盘的实际密度是多少,以便您可以调整文件数。
在扫描期间调整文件总数是我能想到的最好的方法,并且作为你的应用程序的用户我想要的远远超过你计算机器上所有文件的时间。
答案 3 :(得分:0)
由于AV扫描应定期进行,您是否只记得上一次扫描中有多少文件然后将其填充5%?这将使用户大致了解在不必立即进行最新全扫描的情况下需要多长时间。为了获得第一次扫描的准确数字,您必须进行完整的目录搜索并遭受您所描述的暂停。对于自定义单个文件夹,您可以存储前2-3个文件夹级别的文件数,然后在下面执行目录扫描,因为每个子目录中的文件数量会减少。