I don't understand why you are using a recursive procedure at all. The
.GetFiles
method has a recursive feature so that it will get all of the files from the sub-folders too.
Your whole method of adding the listitems to each listview seems a little overcomplicated too.
Here is an example of listing all of the files in two folders, including any sub-folders. Duplicate filenames are highlighted in blue and where the duplicated files differ in size or date last updated then they are highlighted in red.
You should be able to adapt this to your specific needs.
Private Sub comparerfichier(ByVal dir As String, ByVal dir2 As String)
Try
Dim directoire1 As New DirectoryInfo(dir)
Dim directoire2 As New DirectoryInfo(dir2)
Dim fichierinfo1() As FileInfo = directoire1.GetFiles("*.*", SearchOption.AllDirectories)
Dim fichierinfo2() As FileInfo = directoire2.GetFiles("*.*", SearchOption.AllDirectories)
Dim dupNames = From a In fichierinfo1 Join b In fichierinfo2 On a.Name Equals b.Name Select a.Name
SetUpListView(ListView1)
SetUpListView(ListView2)
FillListView(fichierinfo1, ListView1)
FillListView(fichierinfo2, ListView2)
For Each pareil As String In dupNames
Dim itemA As ListViewItem = ListView1.Items(pareil)
Dim itemB As ListViewItem = ListView2.Items(pareil)
Dim infoA As FileInfo = CType(itemA.Tag, FileInfo)
Dim infoB As FileInfo = CType(itemB.Tag, FileInfo)
If infoA.Length <> infoB.Length OrElse infoA.LastWriteTime <> infoB.LastWriteTime Then
itemB.ForeColor = Color.Red
itemA.ForeColor = Color.Red
Else
itemA.ForeColor = Color.Blue
itemB.ForeColor = Color.Blue
End If
Next
Catch ex As Exception
MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End Sub
Private Sub SetUpListView(lv As ListView)
With lv
.View = View.Details
.GridLines = True
.FullRowSelect = True
.CheckBoxes = True
.Columns.Add("Fichiers", 150, HorizontalAlignment.Left)
.Columns.Add("Dossier", 150, HorizontalAlignment.Left)
.Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left)
End With
End Sub
Private Sub FillListView(fichierinfo() As FileInfo, lv As ListView)
For Each repertoire As FileInfo In fichierinfo
Dim fichier As New ListViewItem(repertoire.Name)
With fichier
.Name = repertoire.Name
.SubItems.Add(repertoire.DirectoryName)
.SubItems.Add(repertoire.LastWriteTime.ToString)
.Tag = repertoire
End With
lv.Items.Add(fichier)
Next
End Sub