Die DLL enthält die Klasse GFileSearch und die Klasse GThreadFileSearch. Mit Hilfe dieser Klassen können Dateiverzeichnisse durchsucht werden. das Ergebnis wird in einem TStringList-Objekt gespeichert. Die Klasse GThreadFileSearch durchsucht mittels Threads; ist also etwas schneller. Das trifft allerdings nur zu, wenn bei der Auswahl der Directorys für die Suche die Nutzung von Threads berücksichtigt werden. So hat es keinen Sinn ein Suche mittels Threads durchzuführen, wenn nur das gesamte Verzeichnis c:\ gescannt werden soll. Hier ist kein Geschwindigkeitsvorteil zu erwarten. Werden hingegen viele kleine Verzeichnisse durchsucht, so ist die Suche mittels Threads schneller.
Beispiel:
int rt;
GFileSearch test;
test.SetVerzeichnis("c:");
test.SetDateimuster("*.*");
test.SetUnterverzeichnis(false);
bool rc=test.SetSearchDate("<31.12.2000"); //Sucht alle Dateien vor dem 31.12.2000
rt=test.Search();
ListBox1->Items->AddStrings(test.Ergebnis);
Label1->Caption=rt;
Das Beispiel durchsucht ab der Ebene c: (Wurzelverzeinis)
Es werden
alle Dateitypen berücksichtigt.
Unterverzeichnisse werden nicht
durchsucht.
Die Variable rt enthält nach Abschluß der Suche die
Anzahl der gefundenen Dateien. Mittels der Methode AddStrings wird die
Ergebnisliste einer ListBox zugewiesen.
Die Nutzung der Methode Assign
ListBox1->Items->Assign(test.Ergebnis);
führt zu einem EA-Convert Error. Der Grund ist mir unbekannt.
Offenbar gibt es Probleme, eine LIB-Datei des C++Builders 4 in dem
C++Builder 5 zu nutzen, wenn Übergabeparameter vom Typ BOOL sind. Die
Klasse enthält 3 Methoden, die als Übergabeparameter einen BOOL
erwarten.
Aus diesem Grunde wurden diese 3 Methoden nochmals
überladen. Sie können jetzt auch mit einem INT versehen werden.Wobei
gilt:
| GFileSearch | ||
Konstruktoren |
||
| GFileSearch(); | StandardKonstruktoren mit folgenen
Vorgaben: Startverzeichnis ist c: Unterverzeichnisse werden nicht durchsucht Dateimuster ist *.* Es werden keine Dateiattribute berücksichtigt. Dateidatum/zeit und Dateigröße werden nicht zurückgegeben Directroys werden nicht mit in die Liste aufegenommen |
|
Destruktor |
||
| ~GFileSearch() | Löscht die Ergebnisliste | |
Klassenfunktionen |
||
| void SetVerzeichnis(char* verz); | Setzt das Startverzeichnis | |
| char* GetVerzeichnis(); | Gibt das Startverzeichnis zurück | |
| void SetUnterverzeichnis(bool u); | Gibt an, ob Unterverzeichnisse durchsucht werden sollen (true) oder nicht (false, Standard). | |
| void SetUnterverzeichnis(int u); | Überladen: u!=0 -> true u==0 -> false |
|
| bool GetUnterverzeichnis(); | Gibt zurück, ob Unterverzeichnisse durchsucht werden sollen (true) oder nicht (false). | |
| void SetWithDirectorys(bool wert); | Gibt an, ob die Directorys mit in die Liste aufegenommen werden sollen (true) oder nicht (false). | |
| void SetWithDirectorys(int wert); | Überladen: wert!=0 -> true wert==0 -> false |
|
| bool GetWithDirectorys(); | Gibt zurück, ob Directorys der Liste hinzugefügt werden sollen (true) oder nicht (false). | |
| void SetDateimuster(char* datei); | Setzt das Suchmuster für die Dateien. Mehere Dateitypen werden durch | getrennt. Also sucht *.bmp|*.txt nach BMP-und Textdateien | |
| char* GetDateimuster(); | Gibt das Suchmuster für die Dateien zurück | |
| void SetAttribut(int attr); | Setzt Dateiattribute: (Siehe TSearchRec-Structur in der Hilfe) |
|
| void GetFileDate(int wert); | Gibt an , ob in der Ergebnisliste durch den Delimiter
getrennt das Filedatum/zeit geliefert werden soll: 0 = kein Datum & Zeit (Standard) 1 = Nur Datum 2 = Datum und Zeit 3= Nur Zeit |
|
| void GetFileSize(bool wert); | Gibt an , ob in der Ergebnisliste durch den Delimiter getrennt die Filegröße geliefert werden soll | |
| void GetFileSize(int wert); | Überladen: wert!=0 -> true wert==0 -> false |
|
| void SetDelimiter(char* zeichen); | Setzt das Trennzeichen in der Ergebnisliste (Standard ist |) | |
| long Search(); | Startet die Suche und gibt die Anzahl der gefundenen Dateien zurück | |
| bool SetSearchDate(String value); | Das Datum der Datei wird bei der Suche
berücksichtigt. Der String muß wie folgt aufgebaut werden:
"<31,12.2000" Es werden nur Dateien gesucht, die vor diesem Datum liegen ">31,12.2000" Es werden nur Dateien gesucht, die nach diesem Datum liegen "=31,12.2000" Es werden nur Dateien gesucht, die diesen Datum haben Der Rückgabewert (true/false) zeigt an, ob der String korrekt übergeben wurde und die Suche mit dem Datum stattfindet. |
|
Klassenfelder |
||
| TStringList *Ergebnis; | Enthält nach der Suche die gefundenen Dateinamen | |
Die Klasse GThreadFileSearch ist von der Klasse GFileSearch abgeleitet. Für sie trifft da obengesagte also genau so zu. Es werden in der folgenden Liste nur die neuen oder überschriebenen Methoden erläutert.
Beispiel:
GThreadFileSearch test;
TStringList *my=new TStringList();
my->Add("h:\\");
my->Add("d:\\");
int rt;
test.SetVerzeichnis(my);
test.SetUnterverzeichnis(true);
test.SetWithDirectorys(false);
rt=test.Search();
ListBox2->Items->AddStrings(test.Ergebnis);
Label3->Caption=rt;
delete my;
| GThreadFileSearch | ||
Klassenfunktionen |
||
| void SetVerzeichnis(TStringList *Verzliste);
(überschrieben) |
Setzt das Startverzeichnis. Erwartet aber eine TStringListe mit den zu durchsuchenden Directorys. | |
| char* GetVerzeichnis(); | Gibt die TStringListe als TEXT zurück | |
| void SetMaxThreads(int value); | Gibt an, wieviele Thread zur Suche genutzt werden.
Standard=10 Während einer Suche kann dieser Wert nicht geändert werden. |
|
| int GetMaxThreads(); | Gibt zurück wieviele Threads genutzt werden | |
Download |
||
| chfilesearch.dll | Version : 1.7.0.222 | 276 KB |
| Testanwendung (beötigt die DLL) | 283 KB | |
| 1.7.0.222 | Suche nach mehreren Dateitypen impelmentiert |
| 1.7.0.219 | Migration auf C++ Builder 2006 |
| 1.6.0.218 | GThreadFileSearch eingeführt |
| 1.5.0.62 | Dateidatum/zeit und Datei größe werden auf Wunsch zurückgeliefert. Die zurückgelieferten Elemente werden durch den Delimiter getrennt. |
| 1.5.0.71 | Neue Methoden mit denen bestimmt word, ob die Directorys mit in die Ergebnisliste aufgenommen werden. |
| 1.5.0.154 | Anpassungen an XP |
| 1.6.0.166 | Anpassung an C++Builder 6 & Neue Funktion zum Suchen mit Datumsvorgabe |