![]() |
Dateien Suchen nach Endung?
Hallo,
Ich möchte nach bestimmten Dateien Suchen für ein Programm aber das stürzt immer wieder ab nur wieso ? Ich habe folgende Prozeduren... Zur Suche:
Delphi-Quellcode:
Button 1:
procedure TForm1.SucheDir(ext:Str3; pfad:String);
var sr:TSearchRec; r:integer; begin r:=FindFirst(pfad+'\*.*',faAnyFile,sr); while r=0 do begin if Copy(sr.name,1,1)<>'.' then (*. und .. in Verzeichznissen ignorieren *) begin if (sr.attr<>0) and (faDirectory<>0) then (* Verzeichnis gefunden *) SucheDir(ext,pfad+'\'+sr.name) else (* Datei: ist die Erweiterung ok? dann anzeigen *) if System.Copy(sr.name, Pos('.',sr.name),4)='.'+ext then ListBox1.Items.Add(pfad+'\'+sr.name); end; Application.ProcessMessages; r:=FindNext(sr); end; FindClose(sr); end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin if Length(Edit1.Text) > 3 then begin ShowMessage('Bitte maximal 3 Zeichen für die Erweiterung eingeben!'); exit; end; Button1.Enabled:=false; ListBox1.Clear; SucheDir(Edit1.Text,DriveComboBox1.Drive+':'); Button1.Enabled:=true; end; |
Re: Dateien Suchen nach Endung?
dazu sollte es jede menge Beispiele geben. Als tipp:
Delphi-Quellcode:
Diese Anweisung filtert nicht nur "." und ".." sondern alles was mit einem "." beginnt.
if Copy(sr.name,1,1)<>'.' then
und Anstelle von
Delphi-Quellcode:
kannst du auch
System.Copy(sr.name, Pos('.',sr.name),4)
Delphi-Quellcode:
verwenden. Dann solltest du beachten das zum Beispiel ".txt" und ".TxT" nicht das gleiche ist.
ExtractFileExt(sr.name)
Dein vergleich
Delphi-Quellcode:
schlägt also auch fehl wenn groß/klein-schreibung verschieden ist.
if System.Copy(sr.name, Pos('.',sr.name),4)='.'+ext then
Zudem wäre es recht hilfreich wenn du uns den Fehler nennen würdest der ab und zu kommt und an welcher Stelle dieser kommt. |
Re: Dateien Suchen nach Endung?
Sobald er sucht...
Er sucht 3 Sekunden und folgender Fehler kommt: Runtime error 202 at 0001:01BE. |
Re: Dateien Suchen nach Endung?
mir fällt grad auf das dies hier auch unsinnig ist:
Delphi-Quellcode:
faDirectory ist eine Konstante die immer ungleich 0 ist (somit ist der Teil hinfällig) und sr.attr ist ungleich 0 wenn die Datei versteckt, schreibgeschützt, Archiv, ein Verzeichnis oder ein Volume ist. Das ganze ist also recht unzuverlässig. Dementsprechend würdest du also wenn eine Datei Namens "hallo.txt" gefunden wird welche schreibgeschützt ist diese als Verzeichnis ansehen und dann nach "pfad\hallo.txt\*.*" suchen.
if (sr.attr<>0) and (faDirectory<>0) then
Wie bereits erwähnt gibt es genug funktionierende Beispiel über die Suchfunktion zu finden. |
Re: Dateien Suchen nach Endung?
Hier zunächst mal eine ganz saubere Prozedure um Dateien aufzulisten:
Delphi-Quellcode:
Nimm diese Procedure und alles wird gut!
function BuildFileList(const Path: string; const Attr: Integer; const List: TStrings): Boolean;
var SearchRec: TSearchRec; R: Integer; begin Assert(List <> nil); R := FindFirst(Path, Attr, SearchRec); Result := R = 0; List.BeginUpdate; try if Result then begin while R = 0 do begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then List.Add(SearchRec.Name); R := FindNext(SearchRec); end; Result := R = ERROR_NO_MORE_FILES; end; finally SysUtils.FindClose(SearchRec); List.EndUpdate; end; end;
Delphi-Quellcode:
Siehst du auch den Unterschied zwischen SucheDir() und BuildFileList() ????
var
pfad:string; begin pfad := DriveComboBox1.Drive+':\*.*'; pfad := changeFileExt(pfad, Edit1.Text); BuildFileList(pfad,faAnyFile, ListBox1.Items); BuildFileList() ist universell einsetzbar; du kannst die Funktion nehmen und einfach in ein anderes Delphi-Projekt übernehmen. |
Re: Dateien Suchen nach Endung?
Zitat:
@shmia danke :) werds mal ausprobieren :) bei fragen meld ich mich |
Re: Dateien Suchen nach Endung?
Zitat:
|
Re: Dateien Suchen nach Endung?
Moin Zusammen,
Zitat:
Man kann es nur noch so im Explorer eingeben. |
Re: Dateien Suchen nach Endung?
Hi,
ich habe mal schnell einen Code entwickelt der dir helfen sollte. Es sind zwar schon einige Beispiele genannt worden aber ich will dir meinen nicht vorenthalten:
Delphi-Quellcode:
Wie gesagt, auf die schnelle, sollte aber fuktionieren.
procedure TForm1.CreateFileList(Dir, Ext: String; UseSubDirs: Boolean);
var SR: TSearchRec; begin If FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then Repeat If (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') and (UseSubDirs) then CreateFileList(IncludeTrailingPathDelimiter(Dir + SR.Name), Ext, UseSubDirs) Else If LowerCase(ExtractFileExt(SR.Name)) = LowerCase(Ext) then begin Application.ProcessMessages; ListBox1.Items.Add(Dir + SR.Name); end; Until FindNext(SR) <> 0; FindClose(SR); end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Clear; CreateFileList(DriveComboBox1.Drive + ':\', Edit1.Text, CheckBox1.Checked); end; Gruß Mazel |
Re: Dateien Suchen nach Endung?
Eins verstehe ich nicht, warum nicht gleich z.b. FindFirst('c:\*.endung', ..) ?
|
Re: Dateien Suchen nach Endung?
Zitat:
|
Re: Dateien Suchen nach Endung?
shima ich hätte da eine kurze frage:
wie kann man bitte die unterordner bitte ergänzen?! nur im Hauptpfad ist ja nicht gerade Sinnvoll... |
Re: Dateien Suchen nach Endung?
oookaayyy das problem hat sich erledigt! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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