![]() |
FindFirstFile: Wie suche ich auch in Unterordnern?
siehe titel. Mit werden immer nur die dateien in dem hauptordner den ich der funktion übergebe angezeigt, nicht aber die dateien dessen unterordner. Wie mache ich das?
|
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
Zitat:
da musst Du rekursiv alle Unterordner dursuchen. Einen enstsprechenden Code findest Du in der Library. Du musst ihn nur geringfügig ändern (einfach ne Abfrage nach Deinem Dateinamen einbauen). mfG mirage228 |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
moin Mirage,
ich muss noch erwähnen das ich nicht die VCL version FindFirst meine, sondern die API funktion FindFirstFile und einen code finde ich in der cod lib nicht. ich weiss derzeit nicht wie ich überhaupt an die ordner komme. |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
Hi,
hier ist der Code: ![]() Das nach nonVCL umzubauen sollte aber kein Problem darstellen (hoffe ich :mrgreen: ) - im Prinzip ist beides das selbe. mfG mirage228 |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
hallo mirage,
leider hilft mir das nicht :oops: FindFirst hat da einen parameter den ich bei FindFirstFile nicht habe und zwar: Zitat:
|
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
Hi,
so kann man es machen, läuft mit ShellAPI:
Delphi-Quellcode:
Der Parameter fa.... gibt den Filetyp an, also z.B. alle Files (faAnyFile) oder nur Dir's (faDirectory).
interface
procedure DirSearch(SearchDir, SearchFile : string; var DirList, FileList : TStringList); implementation procedure DirSearch(SearchDir, SearchFile : string; var DirList, FileList : TStringList); var i : Integer; SearchRec : TSearchRec; begin if SearchDir[Length(SearchDir)] <> '\' then SearchDir := SearchDir + '\'; i := FindFirst(SearchDir + SearchFile, faDirectory, SearchRec); if DirectoryExists(SearchDir) then DirList.Add(Copy(SearchDir, 0, Length(SearchDir) -1)); while i = 0 do begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin if DirectoryExists(SearchDir + SearchRec.Name) then DirList.Add(SearchDir + SearchRec.Name); if FileExists(SearchDir + SearchRec.Name) then FileList.Add(SearchDir + SearchRec.Name); SearchRec.Name := SearchDir + SearchRec.Name; DirSearch(SearchRec.Name, SearchFile, DirList, FileList); end; i := FindNext(SearchRec); end; FindClose(SearchRec); end; Ich hoffe geholfen zu haben. Gruß Michael |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
hallo karmi,
die shellapi wollte ich eigentlich weglassen (hoffe du hast den code nicht extra geschrieben), sonst danke auf jeden fall :thumb: Nur wie gesagt wollte ich die unit weglassen....ich dachte wie gesagt das FindFirstFile irgendwie auch unterverzeichnisse mit einbeziehen kann...aber scheint wohl nicht so.... gibt es denn sonst eine funktion um unterordner eines ordners in eine list zu bekommen oder so? Ich möchte nämlich in einem verzeichnis(+ unterverzeichnisse) alle dateien anzeigen die die endung *.txt haben |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
das geht mit FindeFirstFile genauso, wie mit FindFirst aus der Code-Lib. Und das umzuschreiben sollte kein Problem sein. FindFirst, FindNext durch FindFirstFile und FindnextFile ersetzen, Parameter anpassen und die eben den Rückgabewert der API-Funktionen auswerten.
Ich habe es mal schnell umgeschrieben:
Delphi-Quellcode:
Die TStrings wirst du mit einem dynamischen String Array los, aber das solltest du selber hinbekommen.
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True); var wfd: TWin32FindData; hFile: THandle; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then begin hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd); if hFile <> INVALID_HANDLE_VALUE then try repeat if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then if (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then FindAllFiles(FileList, RootFolder + wfd.cFileName, Mask, Recurse); until FindNextFile(hFile, wfd) = False; finally windows.FindClose(hFile); end; end; hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd); if hFile <> INVALID_HANDLE_VALUE then try repeat if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY then begin FileList.Add(RootFolder + wfd.cFileName); end; until FindNextFile(hFile, wfd) = False; finally Windows.FindClose(hFile); end; end; procedure TForm1.Button1Click(Sender: TObject); var sl: TStrings; begin sl := TStringList.Create; try FindAllFiles(sl, 'd:\', '*.*', True); ListBox1.Items := sl; finally sl.Free; end; end; |
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
Zitat:
|
Re: FindFirstFile: Wie suche ich auch in Unterordnern?
Moin!
Zitat:
MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz