Soyez le premier à donner votre avis sur cette source.
Vue 7 188 fois - Téléchargée 513 fois
//Unité de Recherche Récursive //Créée par MORLET Alexandre en 2002 //Searching est la routine principale à être appelée //Ces trois arguments sont //1.Répertoire Racine à partir duquel la recherche s'effectue //2.Extension de Fichier à rechercher (3 caractères en général) //3.Une valeur booléenne autorisant oui ou non une recherche récursive UNIT U_Searching; INTERFACE USES SysUtils; //Seule cette procedure est accessible de l'extérieur PROCEDURE Searching (RootFolder : shortstring; CONST FileExt : shortstring; CONST Recursive : boolean); //TabFilePath : Tableau dynamique mémorisant le chemin de tous les fichiers recherchés //TabFilesize : Tableau dynamique mémorisant la taille de tous les fichiers recherchés //NBFileFound : Le Nombre total de fichiers trouvés VAR TabFilePath : ARRAY OF shortstring; TabFileSize : ARRAY OF integer; NBFilesFound : integer; TotalSize : integer; IMPLEMENTATION //Recherche de fichiers d'extension "FileExtension" dans un répertoire "Directory" PROCEDURE FileSearching (CONST Directory, FileExt : shortstring); VAR SearchFileRec : TSearchRec; BEGIN IF FindFirst(Directory + '*.' + FileExt, faAnyFile, SearchFileRec)=0 THEN BEGIN NBFilesFound := NBFilesFound + 1; setLength(TabFilePath, NBFilesFound); setLength(TabFileSize, NBFilesFound); TabFilePath[NBFilesFound-1] := Directory + SearchFileRec.Name; TabFilesize[NBFilesFound-1] := SearchFileRec.Size; WHILE FindNext(SearchFileRec)=0 DO BEGIN NBFilesFound := NBFilesFound + 1; setLength(TabFilePath, NBFilesFound); setLength(TabFileSize, NBFilesFound); TabFilePath[NBFilesFound-1] := Directory + SearchFileRec.Name; TabFileSize[NBFilesFound-1] := SearchFileRec.Size; END; END; FindClose(SearchFileRec); END; //Recherche récursive ou non à partir d'un répertoire racine "RootFolder" PROCEDURE DirectorySearching (CONST RootFolder, FileExt : shortstring; CONST Recursive : boolean); VAR SearchDirRec : TSearchRec; FolderFound : STRING; BEGIN FindFirst(RootFolder + '*', faDirectory, SearchDirRec); //Test permettant de déterminer s'il s'agit bien d'un dossier et non d'un fichier //C'est un dossier si : "valeur de l'attribut (nombre entier) AND constante d'attribut (faDirectory) > 0) //"." et ".." représente respectivement le répertoire courant et le répertoire parent IF (SearchDirRec.Name<>'.') AND (SearchDirRec.Name<>'..') AND ((SearchDirRec.Attr AND faDirectory)>0) THEN FolderFound := RootFolder + SearchDirRec.Name; while FindNext(SearchDirRec)=0 DO IF (SearchDirRec.Name<>'.') AND (SearchDirRec.Name<>'..') AND ((SearchDirRec.Attr AND faDirectory)>0)THEN BEGIN FolderFound := RootFolder + SearchDirRec.Name + '\'; FileSearching(FolderFound, FileExt); DirectorySearching(FolderFound, FileExt, true); END; FindClose(SearchDirRec); END; PROCEDURE Searching (RootFolder : shortstring; CONST FileExt : shortstring; CONST Recursive : boolean); VAR i : integer; BEGIN NBFilesFound := 0; TotalSize := 0; IF Length(RootFolder) > 3 THEN RootFolder := RootFolder + '\'; FileSearching(RootFolder, FileExt); IF Recursive THEN DirectorySearching (RootFolder, FileExt, Recursive); IF NBFilesFound > 0 THEN FOR i:=0 TO Length(TabFileSize) - 1 DO TotalSize := TotalSize + TabFileSize[i]; END; END.
11 sept. 2004 à 14:14
13 août 2004 à 16:45
Il faut rajouter:
FolderFound := RootFolder + SearchDirRec.Name + '\';
FileSearching(FolderFound, FileExt);
DirectorySearching(FolderFound, FileExt, true);
après le premier "IF" dans SearchDirectory();
Voilou :)
16 juil. 2002 à 16:33
Donc quand tu compare ton prog avec la recherche de Windows il y a une sacrée différence.
Je suis trés intéressé et j'espère que tu trouvera la solution.
9/10 - Manu.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.