I just put an example together of using the dictionary. There might be an
advantage (I think) over arrays in that you do not have to loop through the
contents of two arrays to compare the two lists of contents.
This example adds the contents of two folders to two dictionaries. The
contents of the dictionaries are compared and the files that are unique to
each list are added to two different ListBoxes (ListBox1 and ListBox2), one
being for the unique files in the Source folder and the other for the unique
files in the Target folder.
This is NOT recursive. It was thrown together only as an example.
Make two properties, SourceDictionary as Dictionary and TargetDictionary as
Dictionary
Action event of a PushButton:
Dim sourceDictCnt as Integer
Dim targetDictCnt as Integer
Dim i, h as Integer
If SourceDictionary.Count > 0 then
sourceDictCnt = SourceDictionary.Count - 1
For i = 0 to sourceDictCnt
If not TargetDictionary.HasKey(SourceDictionary.Key(i)) then
ListBox1.AddRow SourceDictionary.Key(i)
End If
Next
End If
If TargetDictionary.Count > 0 then
targetDictCnt = TargetDictionary.Count - 1
For h = 0 to targetDictCnt
If not SourceDictionary.HasKey(TargetDictionary.Key(h)) then
ListBox2.AddRow TargetDictionary.Key(h)
End If
Next
End If
Your main code (the code that parses the directories) could add the path and
file names as Value and Key pairs to the two dictionaries as it populates
the two lists.
Dim i, sourceCount, targetCount as Integer
Dim sourceName, sourcePath as String
Dim targetName, targetPath as String
Dim sourceFolder, targetFolder as FolderItem
Dim sourceDict as New Dictionary
Dim targetDict as New Dictionary
sourceFolder = DesktopFolder.Child("Test").Child("Source")
sourceCount = sourceFolder.Count
targetFolder = DesktopFolder.Child("Test").Child("Target")
targetCount = targetFolder.Count
If sourceCount > 0 then
For i = 1 to sourceCount
sourceName = sourceFolder.Item(i).Name
sourcePath = sourceFolder.Item(i).AbsolutePath
SourceList.AddRow sourceName
sourceDict.Value(sourceName) = sourcePath
Next
End If
If targetCount > 0 then
For i = 1 to targetCount
targetName = targetFolder.Item(i).Name
targetPath = targetFolder.Item(i).AbsolutePath
TargetList.AddRow targetName
targetDict.Value(targetName) = targetPath
Next
End If
SourceDictionary = sourceDict
TargetDictionary = targetDict
_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>
Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>