Un outil de comparaison de fichiers, mais cette fois ci en mode console et plus rapide au niveau de l'execution (mais les lignes s'affichent 300 par 300)
Source / Exemple :
Imports System.IO
Module Module1
Sub Main()
Dim strinput As String
Dim i As Integer
Dim array(Environment.GetCommandLineArgs.GetUpperBound(0)) As String
For i = 0 To Environment.GetCommandLineArgs.GetUpperBound(0)
array(i) = Environment.GetCommandLineArgs(i)
Next i
If array.GetUpperBound(0) <> 2 Then
Console.WriteLine("Vous devez lancer deux fichiers en arguments")
GoTo fin
End If
If IO.File.Exists(array(1)) And IO.File.Exists(array(2)) Then
Dim chemin1 As String = array(1)
Dim chemin2 As String = array(2)
'On commence par lire les deux fichiers dans un tableau de bytes
Dim hbread1 As New BinaryReader(File.OpenRead(chemin1)) 'on defini les deux objets de lecture de fichier
Dim hbread2 As New BinaryReader(File.OpenRead(chemin2)) ' ""
Dim smallestfile As Integer
Dim F_array1(FileLen(chemin1) - 1) As Byte 'on defini les deux tableaux de bytes de la taille du fichier selectionné
Dim F_array2(FileLen(chemin2) - 1) As Byte ' ""
hbread1.BaseStream.Seek(0, SeekOrigin.Begin) 'on defini le pointeur en debut de fichier
hbread1.Read(F_array1, 0, FileLen(chemin1)) 'on lit le fichier entier dans le tableau 1
hbread1.BaseStream.Flush() 'on libere le buffer
hbread1.Close() 'on ferme l'objet
hbread2.BaseStream.Seek(0, SeekOrigin.Begin) 'on defini le pointeur en debut de fichier
hbread2.Read(F_array2, 0, FileLen(chemin2)) 'on lit le fichier entier dans le tableau 2
hbread2.BaseStream.Flush() 'on libere le buffer
hbread2.Close() 'on ferme l'objet
Dim maxi As Long
Dim mini As Long
'Ce qui suit ne concerne que les "file compare" de fichiers de tailles differentes
Dim nnn As String = ""
If F_array1.GetUpperBound(0) <> F_array2.GetUpperBound(0) Then
Console.WriteLine("Les deux fichiers ne font pas la meme taille, voulez vous tout de meme les comparer? O/N")
While (nnn.ToUpper <> "N" And nnn.ToUpper <> "O")
nnn = Console.ReadLine.ToString
End While
If nnn.ToUpper = "N" Then GoTo fin
If F_array1.GetUpperBound(0) < F_array2.GetUpperBound(0) Then
maxi = F_array2.GetUpperBound(0)
mini = F_array1.GetUpperBound(0)
smallestfile = 1
Else
maxi = F_array1.GetUpperBound(0)
mini = F_array2.GetUpperBound(0)
smallestfile = 2
End If
Else
'si les fichiers sont de meme tailles, mini et maxi sont egaux (j'aurais donc pu aussi prendre la valeur du 2eme tableau)
maxi = F_array1.GetUpperBound(0)
mini = F_array1.GetUpperBound(0)
End If
Dim n As Long
Console.WriteLine(" offset" & " " & "File 1" & " " & "File 2" & " " & "Pos")
For n = 0 To mini
If F_array1(n) <> F_array2(n) Then 'si les deux octets sont differents :
If CDec(n / 300) = Int(n / 300) And n / 300 <> 0 Then strinput = UCase(Console.ReadLine())
Console.WriteLine("0x" & Hex(n).ToString.PadLeft(8, "0") & " " & Hex(F_array1(n)).ToString.PadLeft(2, "0") & " " & Hex(F_array2(n)).ToString.PadLeft(2, "0") & " " & n.ToString)
End If
Next
If maxi = mini Then GoTo fin ' on sort de la procedure si les fichiers font la meme tailles
If smallestfile = 2 Then 'si le fichier2 etait le plus gros alors :
Console.WriteLine("Fin du fichier 2")
strinput = UCase(Console.ReadLine())
For n = mini + 1 To maxi
If CDec(n / 300) = Int(n / 300) Then strinput = UCase(Console.ReadLine())
Console.WriteLine("0x" & Hex(n).ToString.PadLeft(8, "0") & " " & Hex(F_array1(n)).ToString.PadLeft(2, "0") & " " & "E O F" & " " & n.ToString)
Next
Else 'si le fichier 1 etait le plus gros alors :
Console.WriteLine("Fin du fichier 2")
strinput = UCase(Console.ReadLine())
For n = mini + 1 To maxi
Console.WriteLine("0x" & Hex(n).ToString.PadLeft(8, "0") & " " & "E O F" & " " & Hex(F_array2(n)).ToString.PadLeft(2, "0") & " " & n.ToString)
If CDec(n / 300) = Int(n / 300) Then strinput = UCase(Console.ReadLine())
Next
End If
Console.WriteLine("Comparaison terminée")
fin:
Console.WriteLine("Tappez QUIT pour quitter l'application")
While strinput <> "QUIT"
strinput = UCase(Console.ReadLine())
End While
End If
End Sub
End Module
Conclusion :
j'ajouterais surement un system de log dans un fichier... mais la j'ai envie de dormir ^^
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.