避免重复

时间:2011-01-16 06:21:59

标签: c# vb.net

我希望避免使用基于任何驱动器的内容的重复文件。文件可以是任何格式。我不知道用于快速搜索的wat算法以及如何比较所有数据格式。 。请帮帮我先生

3 个答案:

答案 0 :(得分:0)

检查相同内容的一种简单方法是为两个文件计算某种校验和并进行比较。

您可以对文件内容进行MD5计算,然后比较结果。

答案 1 :(得分:0)

创建字典<>这将为每个文件长度分配文件名列表,以字节为单位。通过遍历整个驱动器来填写这本词典。

Dictionary<long,List<string>>

现在您有按文件长度排序的文件。由于只有相同长度的文件可以相同,因此您完成了90%的工作。 : - )

现在您需要比较文件的内容。小文件(例如最多10 MB)通过强力进行比较 - 将所有相同大小的文件加载到内存中,按内容对其进行排序,然后搜索重复项。 (Complexity O(n * log2n)其中n是相同大小的文件数。) 长文件的比较不同:仅加载文件的开始部分,例如10 MB,对它们进行排序并找到重复项,然后只继续使用那些相同的那些。递归继续 - 即调用compariosn函数为具有相同开头的文件的子列表,加载下一个10 MB,排序,比较,递归调用等。这样你获得了非常好的速度,每个文件只加载一次,你不要不需要太多记忆。选择10 MB块是因为它是快速顺序读取和硬盘驱动器寻道时间之间的良好折衷。

此算法应该比Max Kielland提出的所有文件的MD5计算速度快。此外,您不需要加载任何两次 - 如果您去哈希,您需要加载文件以计算哈希值,然后再次加载,如果哈希是相同的,比较内容是100%确保文件是相同的。如果你有100个相同的哈希值,那么如何比较这些文件就会遇到大麻烦。所以我更喜欢我上面写的,即没有哈希。

答案 2 :(得分:0)

有时重复内容有原因。不检查是否一切仍然有效,不要四处乱删文件。