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