Comment recuprer le resultat d'une difference de fichier ?

Flamandier Messages postés 9 Date d'inscription vendredi 24 février 2006 Statut Membre Dernière intervention 5 avril 2007 - 27 oct. 2006 à 14:58
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 28 oct. 2006 à 10:39
Bonjour,

A l'interieur de mon code VB6, je cherche à lancer une commande externe qui me permette d'effectuer une difference de
2 fichiers.

J'ai juste besoin de savoir si les fichiers sont identiques ou different, afin d'afficher une Message box avec cette information.

Avez vous une idée comment je pux coder cela ?

Merci.

5 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 oct. 2006 à 15:51
 Bonjour à tous....

Qu'entends-tu par différence entre 2 fichiers ?

- différence de taille;
- différence du contenu.

Si c'est le contenu de 2 fichiers (.txt) , exemple ci-dessous, en fso,
facilemnt adaptable en vb6.

jean-marc

Option Explicit
Dim Fso, Path, Fic1, Fic2
Dim i, r, imax
Dim ObjTextStream, strtmp1, strtmp2 Const ForReading 1, ForWriting 2, ForAppending=8


Path   = "d:"
Fic1  = "test.txt"
Fic2  = "test1.txt"
imax = 0


Set fso = CreateObject("Scripting.FileSystemObject")
Set ObjTextStream = Fso.OpenTextFile(Path & Fic1, 1)
Do While Not ObjTextStream.AtEndOfStream
   strtmp1 = split(ObjTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp1)
       imax = imax + 1
       ReDim Preserve Tableau1(1, imax)
       Tableau1(1, imax) = strtmp1(i)
   Next
Loop
ObjTextStream.Close


imax = 0
Set ObjTextStream = Fso.OpenTextFile(Path & Fic2, 1)
Do While Not ObjTextStream.AtEndOfStream
   strtmp2 = split(ObjTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp2)
       imax = imax + 1
       ReDim Preserve Tableau2(1, imax)
       Tableau2(1, imax) = strtmp2(i)
   Next
Loop
ObjTextStream.Close


For r = 1 To imax
    If Tableau1(1, r) <> Tableau2(1, r) Then
        MsgBox "La ligne " & r & " est différente entre les 2 fichiers" &vbCrLf&vbCrLf&_
               "1er  tableau " & vbCrLf& Tableau1(1, r) &vbCrLf&vbCrLf&_
               "2ème tableau " & vbCrLf& Tableau2(1, r)
    End If
Next
Set Fso = Nothing
Set ObjTextStream = Nothing
0
Flamandier Messages postés 9 Date d'inscription vendredi 24 février 2006 Statut Membre Dernière intervention 5 avril 2007
27 oct. 2006 à 16:13
Merci pour cette exemple.

Apres quelques recherches, j'ai opté temporairement pour ceci:

Public Sub Comparefiles(Outputfilename As String, ReffileName As String)
  Dim f%, g%, StrOutPut$, StrRef$
  f = FreeFile
  Open Outputfilename For Input As #f
  StrOutPut = Input(LOF(f), #f)
  Close #f
  g = FreeFile
  Open ReffileName For Input As #g
  StrRef = Input(LOF(g), #g)
  Close #g
  If StrOutPut = StrRef Then
    MsgBox ("Identical")
  Else
    MsgBox ("Different")
  End If
  End Sub

Mais ca ne me satisfait qu'a moitie. J'ai des doutes sur la fiabilité de cette comaraison de 2 strings.
Je voudrais utiliser des outils "reconnus" comme Windiff, par exemple, ou "diff" utilisé sous UNIX.

L'avantage de "diff" sous UNIX  ,c'est qu'il renvoit un code retour : 1 si les fichiers sont differents, 0 s'ils sont identiques.
Je ne retrouve pas cette fonctionalité sous Windows, et pire , je ne saurais meme pas recupere le code retour...

Voilà, si vous avez d'autres idéees, je vous remercie.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 oct. 2006 à 21:04
 Re,
Tester la différence d'octets entre les 2 fichiers , quelque soit leur extension,
est une proposition, mais non fiable.

Call ShowFolderSize ("D:\test.txt","D:\test1.txt")
 Function ShowFolderSize(fic1, fic2)
   Dim fso, f1, f2, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f1 = fso.GetFile(fic1)
   Set f2 = fso.GetFile(fic2)
   s = UCase(f1.Name) & " occupe " & f1.size & " octets." &vbCrLf&_
       UCase(f2.Name) & " occupe " & f2.size & " octets."
   ShowFolderSize = s
   MsgBox ShowFolderSize
   Set  fso = Nothing
   Set  f1 = Nothing
   Set  f2 = Nothing
End Function

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 oct. 2006 à 21:16
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 oct. 2006 à 10:39
salut,

disons qu'il existe ceci :
http://gnuwin32.sourceforge.net/packages/diffutils.htm

que tu pourras controller et récupérer le code de retour avec cela :
http://www.vbfrance.com/codes/CONTROLER-PROGRAMME-DOS-CONSOLE_32538.aspx

ShareVB
0
Rejoignez-nous