Téléchargé 20 fois
Vote des utilisateurs
2
0
Détails
Licence : Non renseignée
Mise en ligne le 10 mars 2017
Plate-forme :
Windows
Langue : Français
Référencé dans
Navigation
Doublons - Recherche et suppression de fichiers identiques
Doublons - Recherche et suppression de fichiers identiques
Recherche et suppression de doublons sous Windows.
Par doublons on entend des fichiers identiques, même avec des noms différents (mais avec la même extension toutefois).
Le programme DEMO1.PAS recherche des doublons dans un dossier donné pour un fichier donné.
Le programme DEMO2.PAS recherche des doublons dans un dossier donné pour un ensemble de fichiers.
Le programme DEMO3.PAS recherche des doublons pour un ensemble de fichiers et les envoie à la corbeille.
Le programme DEMO4\DEMO.LPR est une application fenêtrée qui permet de rechercher les doublons pour un ensemble de fichiers avec en option la possibilité de les envoyer aussitôt à la corbeille.
Le programme DEMO5\DEMO.LPR fait la même chose que le précédent, avec cette différence qu'on peut choisir les fichiers à envoyer à la corbeille.
Les projets Lazarus utilisent l'unité THDIALOGS.PAS :
https://www.developpez.net/forums/d1471072/autres-langages/pascal/contribuez/fonction-substitution-messagedlg/
Les programmes ont été testés sous Windows 10 avec FPC 3.0.2 et Lazarus 1.6.4.
Par doublons on entend des fichiers identiques, même avec des noms différents (mais avec la même extension toutefois).
Le programme DEMO1.PAS recherche des doublons dans un dossier donné pour un fichier donné.
Le programme DEMO2.PAS recherche des doublons dans un dossier donné pour un ensemble de fichiers.
Le programme DEMO3.PAS recherche des doublons pour un ensemble de fichiers et les envoie à la corbeille.
Le programme DEMO4\DEMO.LPR est une application fenêtrée qui permet de rechercher les doublons pour un ensemble de fichiers avec en option la possibilité de les envoyer aussitôt à la corbeille.
Le programme DEMO5\DEMO.LPR fait la même chose que le précédent, avec cette différence qu'on peut choisir les fichiers à envoyer à la corbeille.
Les projets Lazarus utilisent l'unité THDIALOGS.PAS :
https://www.developpez.net/forums/d1471072/autres-langages/pascal/contribuez/fonction-substitution-messagedlg/
Les programmes ont été testés sous Windows 10 avec FPC 3.0.2 et Lazarus 1.6.4.
Bonjour ! Je vous propose un nouvel élément à utiliser :
Doublons - Recherche et suppression de fichiers identiques sous Windows
J'avais un dossier d'images (des photos plus exactement) dont certaines étaient en double ou en triple, mélangées et éparpillées dans des sous-dossiers différents, et sous des noms différents. J'avais donc besoin d'un programme qui détecte les doublons et les élimine. Voilà la fonction de ce programme, qui est proposé sous plusieurs formes. À vous de choisir celle qui pourrait correspondre à vos besoins.
Qu'en pensez-vous ?
Doublons - Recherche et suppression de fichiers identiques sous Windows
J'avais un dossier d'images (des photos plus exactement) dont certaines étaient en double ou en triple, mélangées et éparpillées dans des sous-dossiers différents, et sous des noms différents. J'avais donc besoin d'un programme qui détecte les doublons et les élimine. Voilà la fonction de ce programme, qui est proposé sous plusieurs formes. À vous de choisir celle qui pourrait correspondre à vos besoins.
Qu'en pensez-vous ?
salut,
j'ai regardé un peu le code
le fait de parcourir tout les sous répertoire pour chaque fichier afin de trouver un doublon n'est pas super optimisé
J'aurais parcouru les répertoires pour enregistrer chaque fichier dans une liste d'enregistrement du type
genre
le parcourt se ferait comme ceci
J'aurais trié cette liste par taille
et ensuite si les fichiers on la même taille j'aurais fait la comparaison et enregistrer dans une deuxième liste de fichiers dupliqués
j'ai regardé un peu le code
le fait de parcourir tout les sous répertoire pour chaque fichier afin de trouver un doublon n'est pas super optimisé
J'aurais parcouru les répertoires pour enregistrer chaque fichier dans une liste d'enregistrement du type
genre
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | TFichierData = record nom : string; dossier : string; date : integer; taille : integer; use : boolean; end; |
le parcourt se ferait comme ceci
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Function FindOwnAllFiles(AFolder,AExt: String;Recursif : Boolean) : TListFichier; procedure RechercherFichiers(Lst : TListFichier ;NomDossier,exten : string ; Recursif : Boolean ); var hFind : TSearchRec; begin NomDossier := slach(NomDossier); // Attention au '\' ;-) if FindFirst( NomDossier + exten, FaAnyFile, hFind ) = 0 then begin repeat if (hFind.Name <> '.') and (hFind.Name <> '..') then begin { c'est un fichier on l'ajoute a la structure } if ( hFind.Attr and faDirectory ) <> faDirectory then Lst.AddEnreg( hFind.Name, NomDossier, hFind.Size, hFind.Time ) // Ajoute fichier à la liste else { c'est un dossier on va voir dedans } if Recursif Then RechercherFichiers(Lst,(slach(NomDossier) + hFind.Name),exten,Recursif); end; until FindNext(hFind) <> 0; Application.ProcessMessages; FindClose(hFind); end; end; begin result := TListFichier.Create; RechercherFichiers(result,AFolder,AExt,Recursif); end; |
et ensuite si les fichiers on la même taille j'aurais fait la comparaison et enregistrer dans une deuxième liste de fichiers dupliqués
Bonjour Roland.
Programme utile (surtout demo5) et, dans ton code, j'ai trouvé une ou deux fonctions dont j'ignorais l'existence.
Merci à toi.
Cordialement
Thierry
PS : je vais devoir mettre à jour l'unité ThDialogs qui a été écrite à l'époque où Lazarus n'utilisait pas les fichiers .res ---> plantage actuel avec les ressources images.
Programme utile (surtout demo5) et, dans ton code, j'ai trouvé une ou deux fonctions dont j'ignorais l'existence.
Merci à toi.
Cordialement
Thierry
PS : je vais devoir mettre à jour l'unité ThDialogs qui a été écrite à l'époque où Lazarus n'utilisait pas les fichiers .res ---> plantage actuel avec les ressources images.
Bonjour !
Merci pour vos retours.
Ah oui, bien vu. J'avais trouvé dans des discussions lues ici et là les deux formules et j'ai cru paresseusement qu'elles étaient équivalentes : je m'aperçois que ce n'est pas le cas.
Effectivement. Le problème a été évoqué dans cette discussion. J'aurais dû utiliser l'une des procédures par blocs.
Effectivement, je m'en étais aperçu. Nous attendons avec impatience la nouvelle version.
Merci pour vos retours.
Ah oui, bien vu. J'avais trouvé dans des discussions lues ici et là les deux formules et j'ai cru paresseusement qu'elles étaient équivalentes : je m'aperçois que ce n'est pas le cas.
Effectivement. Le problème a été évoqué dans cette discussion. J'aurais dû utiliser l'une des procédures par blocs.
Effectivement, je m'en étais aperçu. Nous attendons avec impatience la nouvelle version.
@anapurna
Merci pour ta remarque. En effet, j'ai choisi la solution de facilité et non pas la plus efficace. Quand j'aurai le temps, j'essaierai d'appliquer la méthode que tu proposes.
Merci pour ta remarque. En effet, j'ai choisi la solution de facilité et non pas la plus efficace. Quand j'aurai le temps, j'essaierai d'appliquer la méthode que tu proposes.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.