查找在FileDialog中选择的重复文件

时间:2019-05-26 06:58:02

标签: vba ms-access access-vba

我正在创建一个函数,该函数查找使用 FileDialog 选择的重复文件,这就是我所做的:

由于 Collection FileDialogSelectedItems是只读的,因此我搜索一个函数以获取哈希并将该集合转换为 Array

Dim FilesArray(), ArraySHA(), FilteredArray() as String 
set fdg = Application.FileDialog(3)

With fdg
.....
If .show = -1 then
   ReDim ArraySHA(fdg.SelectedItems.Count)
   For i = 1 to fdg.SelectedItems.Count
      ArraySHA(i) = FileToSHA256(fdg.SelectedItems.Item(i)) '' New array with hashes
   Next i

然后我使用了另一个函数来过滤ArraySHA中的重复项

   FilteredArray = FilterWords(ArraySHA)

现在我有一个具有唯一哈希值的数组,但是我需要具有selectedItems(文件路径),以便可以导入它们而没有重复项。

非常感谢您


编辑:我根据SelectedItems集合创建了一个字典,仅在每个项目都不存在时添加它们

    For i = 1 To fdg.SelectedItems.Count
        SHA = FileToSHA256(fdg.SelectedItems.Item(i))
        If Not dict.Exists(SHA) Then
                dict.Add SHA, fdg.SelectedItems.Item(i)
        End if
    Next i

现在,我具有仅与一个文件相对应的哈希值,这是其关键值

   For Each key In dict.keys
        UniqueValue = dict(key)
        '
        'do something with each unique value (which is the filepath)
        '
   Next key

1 个答案:

答案 0 :(得分:1)

我基于SelectedItems集合创建了一个字典,仅在每个项目不存在的情况下才添加

    For i = 1 To fdg.SelectedItems.Count
        SHA = FileToSHA256(fdg.SelectedItems.Item(i))
        If Not dict.Exists(SHA) Then
                dict.Add SHA, fdg.SelectedItems.Item(i)
        End if
    Next i

现在,我具有仅与一个文件相对应的哈希值,这是其关键值

   For Each key In dict.keys
        UniqueValue = dict(key)
        '
        'do something with each unique value (which is the filepath)
        '
   Next key