Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1564 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Soft en delphi : comparateur de fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Soft en delphi : comparateur de fichiers

n°287510
rufo
Pas me confondre avec Lycos!
Posté le 16-01-2003 à 12:14:32  profilanswer
 

Si ça en intéresse certains, j'ai développé un petit soft qui permet de trouver les fichiers identiques ayant ou pas une même extension) dans un répertoire et ses sous-répertoires. De plus, il y a un mode de comparaison permettant de dire si un fichier est inclu dans un autre (du point de vu du contenu). Pour télécharger, c'est ici :
http://www.2001-space-odyssey.net/~chris/
ou http://chris.jav.chez.tiscali.fr
menu "Programmation", rubrique "SameFilesDetector"
 
@+

mood
Publicité
Posté le 16-01-2003 à 12:14:32  profilanswer
 

n°287622
[SDF]Poire
Vive Grumly
Posté le 16-01-2003 à 13:56:57  profilanswer
 

C rapide ? (optimisé j'entend :D)
ya les sources ?
 
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°287629
Thander
Posté le 16-01-2003 à 14:09:24  profilanswer
 

Sympa :jap:  
 
On peut voir les sources, juste pour voir comment tu as implémenté ton soft :hello:


---------------
Scully: Mulder, there something out there ; Mulder: I know. I've been saying that for years
n°287641
Kristoph
Posté le 16-01-2003 à 14:26:20  profilanswer
 

Citation :

Site visible uniquement avec Internet Explorer


 
:o

n°287700
lung
Posté le 16-01-2003 à 15:42:45  profilanswer
 

Comment on télécharge ?
 
 :??:

n°287704
Thander
Posté le 16-01-2003 à 15:43:37  profilanswer
 

Y'a un lien mais c'est juste pour l'exe ;)


Message édité par Thander le 16-01-2003 à 15:44:25

---------------
Scully: Mulder, there something out there ; Mulder: I know. I've been saying that for years
n°287706
antp
Super Administrateur
Champion des excuses bidons
Posté le 16-01-2003 à 15:44:48  profilanswer
 

Si y a pas les sources je vois pas fort l'intérêt de mettre le topic ici, d'autant plus qu'il y a déjà le même topic sur Soft & Réseaux :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°288039
rufo
Pas me confondre avec Lycos!
Posté le 17-01-2003 à 08:48:05  profilanswer
 

antp a écrit :

Si y a pas les sources je vois pas fort l'intérêt de mettre le topic ici, d'autant plus qu'il y a déjà le même topic sur Soft & Réseaux :o


 
non, y'a pas les sources... J'ai essayé d'optimiser les fonctions lisants les fichiers puis les comparants (octet par octet). J'ai utiliser les classes TStreamFile pour la lecture des fichiers et TStreamMemory pour la comparaison. Je charge qu'une fois le fichier à comparer et je charge au fur et à mesure les autres fichiers puis je passe au fichier suivant à comparer, etc. Si y'a des moyens plus rapides (autres qu'une routine en asm), je suis preneur... :)

n°288070
[SDF]Poire
Vive Grumly
Posté le 17-01-2003 à 09:46:50  profilanswer
 

tu charges tout le fichier en même à chaque fois et tout l'autre fichier à comparer ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°288103
Kristoph
Posté le 17-01-2003 à 10:25:30  profilanswer
 

rufo a écrit :


 
non, y'a pas les sources... J'ai essayé d'optimiser les fonctions lisants les fichiers puis les comparants (octet par octet). J'ai utiliser les classes TStreamFile pour la lecture des fichiers et TStreamMemory pour la comparaison. Je charge qu'une fois le fichier à comparer et je charge au fur et à mesure les autres fichiers puis je passe au fichier suivant à comparer, etc. Si y'a des moyens plus rapides (autres qu'une routine en asm), je suis preneur... :)


 
Un meilleurs moyen qu'un algo en n^2 dans lequel chaque étape consiste à charger un fichier en mémoire, à le comparé à un autre puis a libéré la mémoire ? Naaaan tu ne trouveras probablement pas.
 
Bien sur, j'aurais peut-être pu t'aider mais j'aime pas ton site :D

mood
Publicité
Posté le 17-01-2003 à 10:25:30  profilanswer
 

n°288104
rufo
Pas me confondre avec Lycos!
Posté le 17-01-2003 à 10:27:41  profilanswer
 

Kristoph a écrit :


 
Un meilleurs moyen qu'un algo en n^2 dans lequel chaque étape consiste à charger un fichier en mémoire, à le comparé à un autre puis a libéré la mémoire ? Naaaan tu ne trouveras probablement pas.
 
Bien sur, j'aurais peut-être pu t'aider mais j'aime pas ton site :D


 
rancunié va :) Je suis un gentil pourtant lol...

n°288106
rufo
Pas me confondre avec Lycos!
Posté le 17-01-2003 à 10:28:54  profilanswer
 

[SDF]Poire a écrit :

tu charges tout le fichier en même à chaque fois et tout l'autre fichier à comparer ?


 
je charge une fois le fichier à comparer puis un à un tous les autres fichiers pour les comparer au premier...

n°288124
[SDF]Poire
Vive Grumly
Posté le 17-01-2003 à 10:50:41  profilanswer
 

euh... j'imagine la comparaison de fichier VOB ou de films (d'images ghost aussi) ça pourrait être drôle.... :whistle:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°288847
rufo
Pas me confondre avec Lycos!
Posté le 18-01-2003 à 12:33:30  profilanswer
 

[SDF]Poire a écrit :

euh... j'imagine la comparaison de fichier VOB ou de films (d'images ghost aussi) ça pourrait être drôle.... :whistle:  


 
oui, j'y ai réfléchi... A priori, vu que j'utilise la ram, j'avais fait un test qui me fait penser que Windows fait du swap quand je demande d'allouer plus de mémoire qu'il y en a de disponible...

n°288864
Kristoph
Posté le 18-01-2003 à 13:00:12  profilanswer
 

Allez, voici un premier truc pour toi :
 
"La taille du fichier".

n°288878
[SDF]Poire
Vive Grumly
Posté le 18-01-2003 à 13:12:50  profilanswer
 

rufo a écrit :


 
oui, j'y ai réfléchi... A priori, vu que j'utilise la ram, j'avais fait un test qui me fait penser que Windows fait du swap quand je demande d'allouer plus de mémoire qu'il y en a de disponible...


T'as combien de swap ? un VOB ça fait 1Go si tu copare un VOB à un autre VOB tu utilises 2Go de mem  :ouch: !!!!!!!!!!!!! (ça plantera avant je pense :D)

n°289128
rufo
Pas me confondre avec Lycos!
Posté le 18-01-2003 à 19:26:09  profilanswer
 

[SDF]Poire a écrit :


T'as combien de swap ? un VOB ça fait 1Go si tu copare un VOB à un autre VOB tu utilises 2Go de mem  :ouch: !!!!!!!!!!!!! (ça plantera avant je pense :D)


 
à mon avis, pour comparer des vob, je crois que ça ira plus vite de les lancer et de regarder la première minute :D plutôt que d'utiliser mon soft...

n°289294
[SDF]Poire
Vive Grumly
Posté le 18-01-2003 à 23:56:13  profilanswer
 

C T un exemple :D
 
les buffers C bien [:zion]


Message édité par [SDF]Poire le 18-01-2003 à 23:56:36
n°289748
rufo
Pas me confondre avec Lycos!
Posté le 20-01-2003 à 09:36:03  profilanswer
 

[SDF]Poire a écrit :

C T un exemple :D
 
les buffers C bien [:zion]


 
oui, mais comment je fais pour lire qu'une seule fois le fichier à comparer avec els buffers?

n°289795
[SDF]Poire
Vive Grumly
Posté le 20-01-2003 à 10:44:24  profilanswer
 

tu bufferises les 2 :D


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°289954
rufo
Pas me confondre avec Lycos!
Posté le 20-01-2003 à 14:48:55  profilanswer
 

[SDF]Poire a écrit :

tu bufferises les 2 :D


 
j'ai un pb : je passe à la fonction chargée de faire la comparaison un pointeur sur le buffer du fichier "source" entièrement chargé (à comparer aux autres fichiers) et le nom du fichier à comparer...

n°290122
rufo
Pas me confondre avec Lycos!
Posté le 20-01-2003 à 17:19:14  profilanswer
 

Pour ceux qui auraient déjà téléchargé mon soft, j'ai mis une MAJ de mon soft car la fonction STOP n'était pas compètement implémentée. Désolé, un petit oubli...

n°290570
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-01-2003 à 10:29:50  profilanswer
 

je pense à un truc, si tu dois juste retrouver des doublons (et non pas trouver les doublons d'un fichier précis), ça serait pas plus facile de faire une liste de checksum (md5 ou autre), de trier cette liste par ordre alphabétique, puis de comparer vraiment les fichiers sont les checksums sont identiques ?


Message édité par antp le 21-01-2003 à 10:30:42

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°290650
Kristoph
Posté le 21-01-2003 à 11:39:16  profilanswer
 

Ce truc m'interresse car j'ai une collection de fichiers mp3 dont certains sont des doublons. Mais si ca tourne pas sous Linux je n'en veux pas :D
 
Moi je ferais ça comme ça :
 
- obtenir une liste de tous les fichiers à traiter+leur taille
- grouper les fichiers par paquets de même taille
- calculer les md5 sum de tous les fichiers qui sont dans un groupe de cardinal > 1
 
Et pour finir :
 
- même checksum md5 = même fichier
Ou
- "mode complet" qui va vraiment tester le contenu des fichiers qui ont le même checksum md5
 
Dans le cas ou tous les fichiers sont identiques, cette méthode est plus lente que la tienne :D

n°290725
Kristoph
Posté le 21-01-2003 à 12:30:04  profilanswer
 

Kristoph a écrit :

Ce truc m'interresse car j'ai une collection de fichiers mp3 dont certains sont des doublons. Mais si ca tourne pas sous Linux je n'en veux pas :D
 
Moi je ferais ça comme ça :
 
- obtenir une liste de tous les fichiers à traiter+leur taille
- grouper les fichiers par paquets de même taille
- calculer les md5 sum de tous les fichiers qui sont dans un groupe de cardinal > 1
 
Et pour finir :
 
- même checksum md5 = même fichier
Ou
- "mode complet" qui va vraiment tester le contenu des fichiers qui ont le même checksum md5
 
Dans le cas ou tous les fichiers sont identiques, cette méthode est plus lente que la tienne :D


 
D'ailleurs, j'ai fini de le faire en Python, voici le code :)
 

Code :
  1. #!/usr/bin/env python
  2. import os
  3. import md5
  4. class FileInfo:
  5. def __init__(self, filename):
  6.  self.filename = filename
  7.  self.filesize = os.path.getsize(filename)
  8.  self.md5sum = None
  9. def __lt__(self, other):
  10.  if self.filesize < other.filesize:
  11.   return 1
  12.  elif self.filesize == other.filesize:
  13.   return self.md5sum < other.md5sum
  14.  else:
  15.   return 0
  16. def probablySame(self, other):
  17.  return (self.filesize == other.filesize) and (self.md5sum == other.md5sum)
  18. def __str__(self):
  19.  return "%s : (%d," % (self.filename, self.filesize) + str(self.md5sum) + " )"
  20. def computeMd5sum(self):
  21.  if self.md5sum == None:
  22.   m = md5.new()
  23.   f = open(self.filename, "rb" )
  24.   r = f.read(1024)
  25.   while len(r) > 0:
  26.    m.update(r)
  27.    r = f.read(1024)
  28.   self.md5sum = m.hexdigest()
  29. class FileList:
  30. def __init__(self):
  31.  self.filelist = []
  32. def addFile(self, dirname, filenames):
  33.  for f in filenames:
  34.   fi = os.path.join(dirname, f)
  35.   if not os.path.isdir(fi):
  36.    self.filelist.append(FileInfo(fi))
  37. def postProcess(self):
  38.  if len(self.filelist) == 0:
  39.   return
  40.  self.filelist.sort()
  41.  fi2 = self.filelist[0]
  42.  for i in range(len(self.filelist)-1):
  43.   fi1 = fi2
  44.   fi2 = self.filelist[i+1]
  45.   if fi1.filesize == fi2.filesize:
  46.    fi1.computeMd5sum()
  47.    fi2.computeMd5sum()
  48.  self.filelist.sort()
  49. def showSame(self):
  50.  if len(self.filelist) == 0:
  51.   return
  52.  fi2 = self.filelist[0]
  53.  for i in range(len(self.filelist)-1):
  54.   fi1 = fi2
  55.   fi2 = self.filelist[i+1]
  56.   if fi1.probablySame(fi2):
  57.    print """File "%s" and "%s" are the same""" % (fi1.filename, fi2.filename)
  58. def walkResult(arg, dirname, filenames):
  59. arg.addFile(dirname, filenames)
  60. def findDup():
  61. fl = FileList()
  62. os.path.walk(".", walkResult, fl)
  63. fl.postProcess()
  64. fl.showSame()
  65. findDup()

n°291554
rufo
Pas me confondre avec Lycos!
Posté le 22-01-2003 à 08:59:23  profilanswer
 

Effectivement, je fais bien une liste des fichiers à traiter (nom du fichier + taille) et je les regroupe par taille (tri croissant) puis je compare le contenu (pas de md5). Ca pourrait aller plus vite avec le md5...
Par contre, pour ma fonction de détection d'un fichier inclu dans un autre, le md5, ca marche?
ex: un fichier contient uniquement la chaîne "abcd" et un autre, uniquement la chaîne "abcdef" -> le premier fichier est inclus dans le second.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Soft en delphi : comparateur de fichiers

 

Sujets relatifs
Comment creer un fichier .exe extractible à partir de fichiers ?[Delphi, Pascal] Manipulation de bits
[VBScript] - Sockets et fichiers, c'est possible en VBS ?Creation de N fichiers...
Copie de fichiers automatisé[Delphi Studio 7 Personnal ] et les composants [Indy] RESOLU =)
[PHP ] Cherche script qui compte les fichiers d'un repertoire precisSoft qui detecte l'ejection cd
Quelle est la différence entre DELPHI 6 et DELPHI 3 ?AIDE!! Nouveau avec Delphi
Plus de sujets relatifs à : Soft en delphi : comparateur de fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR