Сравните 2 каталога в listview
Сейчас я работаю над небольшим проектом. Я пытаюсь сравнить два каталога для папок и файлов. Например, если у меня есть папка с именем toto в моем c:\ и другая с именем toto в моем e:\, она будет сравнивать файлы внутри. Если внутри у меня есть toto.txt, toto1.txt, toto2.txt а в других папках у меня есть toto.txt и toto1.txt, toto232.txt... это добавит toto.txt и toto1.txt в моем списке! :) но я использую рекурсивные процедуры : Рекурсивные Процедуры (Visual Basic)[^] и у меня есть некоторые проблемы с этим! вот моя полная функция :
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 Dim fichierinfo2() As FileInfo = directoire2.GetFiles Dim dupNames = From a In fichierinfo1 Join b In fichierinfo2 On a.Name Equals b.Name Select a.Name ' info for the listview With Me.ListView1 .View = View.Details .GridLines = True .FullRowSelect = True .CheckBoxes = True .Columns.Add("Fichiers", 150, HorizontalAlignment.Left) .Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left) End With ' info sur l autre listview With Me.ListView2 .View = View.Details .GridLines = True .FullRowSelect = True .CheckBoxes = True .Columns.Add("Fichiers", 150, HorizontalAlignment.Left) .Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left) End With 'add the same files in the listview For Each repertoire As FileInfo In fichierinfo1 'check if the files is the same name For Each repertoire2 As FileInfo In fichierinfo2 If repertoire.Name = repertoire2.Name Then Dim fichier As New ListViewItem(repertoire.Name) Dim fichier2 As New ListViewItem(repertoire2.Name) 'files1 With fichier .Name = repertoire.Name .SubItems.Add(repertoire.LastWriteTime.ToString) .Tag = repertoire End With 'files1 With fichier2 .Name = repertoire2.Name .SubItems.Add(repertoire2.LastWriteTime.ToString) .Tag = repertoire2 End With 'add both files Me.ListView1.Items.Add(fichier) Me.ListView2.Items.Add(fichier2) End If Next Next ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ERROR IN THIS PART with THE RECURSIVE PROCEDURE ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim directoiresinfo() As DirectoryInfo = directoire1.GetDirectories Dim directoires2info() As DirectoryInfo = directoire2.GetDirectories Dim directoireGrosseur1() As String = IO.Directory.GetDirectories(dir) Dim directoireGrosseur2() As String = IO.Directory.GetDirectories(dir2) If directoireGrosseur1.Length <> 0 And directoireGrosseur2.Length <> 0 Then For Each info As IO.DirectoryInfo In directoiresinfo For Each info2 As IO.DirectoryInfo In directoires2info If info.Name = info2.Name Then Dim dossier As New ListViewItem(info.Name) Dim dossier2 As New ListViewItem(info2.Name) With dossier .Name = info.Name .SubItems.Add(info.LastWriteTime.ToString) .Tag = info End With With dossier2 .Name = info2.Name .SubItems.Add(info2.LastWriteTime.ToString) .Tag = info2 End With Me.ListView1.Items.Add(dossier) Me.ListView2.Items.Add(dossier2) comparerfichier(info.GetDirectories.ToString, info2.GetDirectories.ToString) End If Next Next End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ERROR IN THIS PART '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 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 End If Next Catch ex As Exception MessageBox.Show(ex.Message, "Comparer 2 répertoires", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try End Sub
Что я уже пробовал:
так что да, мои рекурсивные процедуры работают не очень хорошо! Я пытаюсь его отладить, но пока ничего не нашел! Если вы, ребята, можете мне помочь, это будет очень ценно!
NotPolitcallyCorrect
"Ошибка в этой части" ничего не говорит нам о вашей проблеме.
Wendelius
В чем вся проблема? Если вы получили сообщение об ошибке, опубликуйте полное сообщение или полное описание проблемы.