Rekursive Dateisuche in Verzeichnissen. - C++ Builder Snippets
Im unteren Beispiel wird das Verzeichnis C:\System32 rekursiv durchsucht, alle Ergebnisse (Ordnernamen und Dateinamen) werden in einer
ListBox ausgegeben.
Das Beispiel lässt sich recht einfach erweitern oder verändern.
So sollte es kein Problem sein nach bestimmten Dateitypen (.xls, .bat, .exe usw.) zu suchen.
Interessant ist zudem die verwendete Struktur WIN32_FIND_DATA.
Wer z.B. nur nach versteckten, System oder Archivdateien suchen möchte, sollte sich WIN32_FIND_DATA etwas genauer ansehen.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
//--------------------------------------------------------------------------- //******** ******** //******** Dieses Beispiel stammt von www.ecodes.de ******** //******** ******** #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void FFSearch(AnsiString StartFo) { //Variablen definieren**** HANDLE FileHandle; WIN32_FIND_DATA WFDStr; AnsiString StartFo2=""; AnsiString StartFoFE=StartFo+"\\*"; //Startverzeichnis //Rekursive Suche Starten FileHandle=FindFirstFile(StartFoFE.c_str(),&WFDStr); while (FindNextFile(FileHandle,&WFDStr)) { AnsiString FFound= WFDStr.cFileName; //Gefundener Ordner oder Datei //Ein Ordner wurde gefunden if (WFDStr.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && FFound != ".." && FFound !=".") { StartFo2 = StartFo + "\\" + WFDStr.cFileName; Form1->ListBox1->AddItem(StartFo2,NULL); FFSearch(StartFo2); } //Eine Datei wurde gefunden if (WFDStr.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY && FFound != ".." && FFound !=".") { AnsiString rt = StartFo + "\\" + WFDStr.cFileName ; Form1->ListBox1->AddItem(rt,NULL); } } FindClose(FileHandle); } void __fastcall TForm1::FormCreate(TObject *Sender) { FFSearch("c:\\windows\\system32"); } //--------------------------------------------------------------------------- |