gpt4 book ai didi

c# - 查找文件重复项 - 最好是 C#

转载 作者:太空狗 更新时间:2023-10-30 00:51:40 26 4
gpt4 key购买 nike

我试图在文件服务器上查找给定唯一文件的所有副本。这是我所做的:

  1. 获取唯一文件的哈希码。
  2. 将唯一文件的散列码与文件服务器上每个文件的散列码进行比较。如果相等,则添加到重复列表中。

这可以完成工作但需要很长时间(我的文件服务器上有 20 万个文件)所以我不得不考虑其他事情,这就是我所做的:

  1. 获取唯一文件的哈希码。
  2. 获取唯一文件的字节大小。
  3. 获取具有相同文件大小的所有文件的列表(这非常快,因为我不需要读取文件)
  4. 将唯一文件的哈希码与入围文件的每个文件进行比较。

这将完成任务所需的时间从几小时减少到 10 分钟,但这仍然不是很好,尤其是在尝试为一堆文件查找重复项时。每个文件搜索需要 10 分钟意味着 100 个文件将需要 16 个小时!

是否有比哈希码更好的唯一文件标识符?获取哈希码是这个过程中最耗时的事情。

谢谢,

最佳答案

通过哈希码搜索重复项绝对是最慢的方法;大量磁盘 I/O 和 CPU 处理。

我在这方面有一些经验,我们发现最快的方法是尽快删除文件:

  1. 按文件大小分组的短列表
  2. 逐字节比较每组所有文件的前 256 个字节。这应该会消除很多文件。
  3. 在第 2 步循环,但每次迭代时将缓冲区大小加倍(最大为 16K 左右)

在循环中打开/关闭所有这些文件句柄确实是一个轻微的开销,但不如完全读取所有文件那么多。

关于c# - 查找文件重复项 - 最好是 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758365/

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