找到重复文件的好方法?

时间:2010-04-01 07:42:22

标签: vb.net duplicates

我还不太了解VB.Net(2008,Express Edition),所以我想询问是否有更好的方法来查找具有不同名称但内容相同的文件,即。重复。

在下面的代码中,我使用GetFiles()来检索给定目录中的所有文件,并且对于每个文件,使用MD5来散列其内容,检查该值是否已经存在于字典中:如果是,则它是重复,我会删除它;如果没有,我将此文件名/哈希值添加到字典中以供日后使用:

'Get all files from directory
Dim currfile As String
For Each currfile In Directory.GetFiles("C:\MyFiles\", "File.*")
    'Check if hashing already found as value, ie. duplicate
    If StoreItem.ContainsValue(ReadFileMD5(currfile)) Then
        'Delete duplicate
    'This hashing not yet found in dictionary -> add it
    Else
        StoreItem.Add(currfile, ReadFileMD5(currfile))
    End If
Next

这是解决重复问题的好方法吗,还是我应该知道更好的方法?

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以通过以下

进行优化
  • 迭代所有文件并记录文件名和长度
  • 然后将(MD5)每个文件仅与长度相同的文件进行比较
  • 这是名为embarrassingly parallel的任务之一,因此您应该能够使用多个线程来更有效地执行此操作,并且因为每个比较都是独立的
  • 你只需要将一个文件与另一个文件进行比较,而不是两种方式,即。如果你做比较(f1,f2)那么你不需要做比较(f2,f1)

我确定还有很多其他人。

答案 1 :(得分:0)

您可以通过仅计算一次MD5哈希值来优化此例程(问题中可能是拼写错误,或者您实际上只是两次)。

此外,您可以在计算哈希值之前比较文件长度:如果长度不同,哈希值也会不同(理论上它们可以相同,但这可能不太可能)。