![]() |
Re: Suchmaske nach FindFirst verändern?
Zitat:
Zitat:
|
Re: Suchmaske nach FindFirst verändern?
und noch ein Versuch.
Delphi-Quellcode:
Die Rückgabe, wenn keine weitere Datei gefunden wurde sollte noch geregelt werden.
procedure TForm1.FormCreate(Sender: TObject);
begin // Verzeichnis, das mehrere JPG-Dateien enthält: Form1.Caption := 'F:\test\test1.jpg'; bereitsBearbeiteteDateien := TStringList.Create; end; procedure TForm1.btnGetNextFileClick(Sender: TObject); var SR: TSearchRec; fileName: AnsiString; noMoreFiles : Boolean; begin if FindFirst(Form1.Caption, faAnyFile, SR) = 0 then begin fileName := SR.Name; FindClose(SR); if FindFirst('F:\test\*.jpg', faAnyFile, SR) = 0 then begin noMoreFiles := false; while (bereitsBearbeiteteDateien.indexOf(SR.Name) >= 0) and not noMoreFile do begin if FindNext(SR) > 0 then noMoreFiles:= true; end; end; Form1.Caption := 'F:\test\' + SR.Name; FindClose(SR); end; end; Die StringList (bereitsBearbeiteteDateien) muss natürlich entsprechend gepflegt werden. Grüße Klaus |
Re: Suchmaske nach FindFirst verändern?
Liste der Anhänge anzeigen (Anzahl: 1)
Habe jetzt eine ultimative Lösung geschrieben und möchte sie euch nicht vorenthalten:
Delphi-Quellcode:
Ausgehend von einer geladenen Datei wird die nächste Datei im Verzeichnis der geladenen Datei gesucht. Dabei kann bestimmt werden, ob die Suche am Ende des Verzeichnisses gestoppt oder am Beginn des Verzeichnisses fortgesetzt werden soll. So kann man unabhängig von der Position im Verzeichnis der zuerst geladenen Datei alle Dateien durchgehen.
procedure TForm1.LoadAFile(const AFile: string);
var ThisFilePath, ThisFileName: string; begin Form1.Caption := AFile; mmoFilesInDirectory.Lines.Add(AFile); end; procedure TForm1.btnManuallyLoadAFileClick(Sender: TObject); begin if dlgOpen.Execute(Handle) then begin mmoFilesInDirectory.Lines.Clear; LoadAFile(dlgOpen.FileName); end; end; procedure TForm1.FormCreate(Sender: TObject); begin LoadAFile(ExtractFilePath(Application.ExeName) + 'Unit1.dfm'); end; procedure TForm1.btnGetNextFileClick(Sender: TObject); var ActualFilePath, NextFile: string; NextFileFound: Boolean; SearchRec: TSearchRec; begin NextFileFound := False; ActualFilePath := ExtractFilePath(Form1.Caption); // Geladene Datei suchen: if FindFirst(ActualFilePath + '*.*', faAnyFile, SearchRec) = 0 then begin repeat if not (SearchRec.Attr and faDirectory > 0) then begin if AnsiCompareText(ActualFilePath + SearchRec.Name, Form1.Caption) = 0 then BREAK; end; until FindNext(SearchRec) <> 0; end; // Nächste Datei nach der geladenen Datei suchen: while FindNext(SearchRec) = 0 do begin if not (SearchRec.Attr and faDirectory > 0) then begin NextFile := ActualFilePath + SearchRec.Name; // Geladene Datei ausschließen: if AnsiCompareText(NextFile, Form1.Caption) <> 0 then begin LoadAFile(NextFile); NextFileFound := True; BREAK; end; end; end; FindClose(SearchRec); if not NextFileFound then begin if chkStopAtEndOfDirectory.Checked then MessageDlg('Ende des Verzeichnisses!', mtInformation, [mbOK], 0) else begin // Suche erneut am Beginn des Verzeichnisses fortsetzen: if FindFirst(ActualFilePath + '*.*', faAnyFile, SearchRec) = 0 then begin repeat if not (SearchRec.Attr and faDirectory > 0) then begin mmoFilesInDirectory.Lines.Add(''); LoadAFile(ActualFilePath + SearchRec.Name); BREAK; end; until FindNext(SearchRec) <> 0; end; FindClose(SearchRec); end; end; end; Im Anhang befindet sich ein schönes Demo-Programm, mit dem man alles ausprobieren kann. Der Code kann nach Wunsch auch gerne zur Code-Lib hinzugefügt werden. |
Re: Suchmaske nach FindFirst verändern?
Du bist Dir aber schon im Klaren, daß FindFile keine bestimmte Reihenfolge zurück gibt, oder?
|
Re: Suchmaske nach FindFirst verändern?
Zitat:
|
Re: Suchmaske nach FindFirst verändern?
Zitat:
![]() Zitat:
|
Re: Suchmaske nach FindFirst verändern?
Zitat:
Zitat:
![]() ![]() Es wird nur zufällig vom Dateisystemtreiber sortiert und daß dieser sortieren muß, ist nicht vorgeschrieben. |
Re: Suchmaske nach FindFirst verändern?
Hier nochmals mein Begleittext zum Demoprogramm: "Ausgehend von einer geladenen Datei wird die nächste Datei [also die Datei nach der geladenen Datei, Anm.] im Verzeichnis der geladenen Datei gesucht."
Wenn dann mit FindFirst die Suche am Beginn des Verzeichnisses fortgesetzt wird, so wird auf diese Weise durch alle Dateien des Verzeichnisses so iteriert, dass beim Erreichen der ursprünglichen Datei jede Datei einmal drangekommen ist. Das ist das Ziel und der Zweck des Programms, nicht mehr und nicht weniger. Und es funktioniert. Probier es einfach mal aus! |
Re: Suchmaske nach FindFirst verändern?
Zitat:
Zitat:
Zitat:
|
Re: Suchmaske nach FindFirst verändern?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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