Supprimer les fichier doublon d'un repertoire

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

Supprimer les fichier doublon d'un repertoire

Message par caussatjerome »

C'est un petit code qui liste tous les fichiers d'un repertoire et de tous les sous-dossier, qui efface les fichiers doublons de façon sure ( les fichiers sont comparer par calcule de sommes cryptographique (SHA1).

Ce code n'est pas très rapide, si quelqu'un à une idée pour le rendre plus rapide, merci de poster !

Code : Tout sélectionner

Global NewMap checksum.s(),suppr.l; tableau a deux colonnes global

Procedure Scan_Directory(source.s,  rek = 0) ; Source, indice scan des repertoires et fichiers
  Protected s_type,s_name.s,tfile.l,s_fullname.s,hash.s
  Shared suppr.l,checksum.s()
  If Right(source, 1) <> "\" : source + "\" : EndIf
  If ExamineDirectory(rek, source, "*.*")
    While NextDirectoryEntry(rek)
      s_name.s = DirectoryEntryName(rek) : s_type = DirectoryEntryType(rek)
      Select s_type
        Case #PB_DirectoryEntry_File; si c'est un fichier...
          s_fullname.s = source.s + s_name:tfile.l+1;nombre de fichiers dans le repertoire courant...
          hash.s=SHA1FileFingerprint(s_fullname.s)  ;hash du fichier....
          If hash.s
            If checksum.s(hash.s)<>"" ;si le hash est dans le tableau....
              DeleteFile(s_fullname.s,#PB_FileSystem_Force);on supprime le fichier en doublon ;)
              suppr.l+1                                    ; compteur de fichiers supprimer.
            Else                                           ; si le hash n'est pas dans le tableau...
              checksum.s(hash.s)=s_fullname.s              ; on le rajoute, avec l'emplacement du fichier.
            EndIf
          Else
            Debug "fichier inexistant : "+s_fullname.s;le fichier n'existe plus !
          EndIf
        Case #PB_DirectoryEntry_Directory; c'est un dossier, donc on le scan aussi
          If s_name <> "." And s_name <> ".."
            tfile.l+Scan_Directory(source.s + s_name, rek + 1)
          EndIf
      EndSelect
    Wend
    FinishDirectory(rek)
    ProcedureReturn tfile.l
  EndIf
EndProcedure

total.l = scan_Directory(PathRequester("toto","d:\"))
MessageRequester("Anti-Doublon :","Nombre de fichiers total : "+Str(total.l)+Chr(13)+"Nombre de fichiers doublon effacer : "+Str(suppr.l))
End 0
Kevin Black
Messages : 3
Inscription : mer. 29/juin/2016 12:05

Re: Supprimer les fichier doublon d'un repertoire

Message par Kevin Black »

J'ai beaucoup de fichiers doublons, je vais l'essayer donc.
J'espère que ça va marcher :wink:
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Supprimer les fichier doublon d'un repertoire

Message par Ar-S »

Je me suis permis d'intenté ton code pour une meilleur lisibilité.

Pour le faire :

Dans ton IDE
CRTL + A : tout selectionner
CRTL + I : Identation
CTRL + C : copier

sur le forum dans ton topic,
- Mets les balises codes
- entre les 2 balises : CTRL + V : Coller
ainsi ton code est clairement visible pour les autres ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Supprimer les fichier doublon d'un repertoire

Message par falsam »

@Ar-s tu comptes modifié tous les codes de 2014 ^^?

@KevinBlack: Inutiles de déférer des sujets de 2014 pour ce style de commentaire.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Supprimer les fichier doublon d'un repertoire

Message par Ar-S »

Ouups :oops: :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre