chfilesearch


Klasse GFileSearch & GThreadFileSearch

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.

GFileSearch

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:
  1. Suchrichtung
    < berücksichtigt nur Dateien vor dem Datum
    > berücksichtigt nur Dateien nach dem Datum
    = berücksichtigt nur Dateien mit dem Datum
  2. Datum im Format tt.mm.jjjj
Beispiel:
"<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

GThreadFileSearch

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


Revision

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