AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Suchmaske nach FindFirst verändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Suchmaske nach FindFirst verändern?

Ein Thema von PeterPanino · begonnen am 21. Nov 2009 · letzter Beitrag vom 30. Nov 2009
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:04
Zitat von himitsu:
Was aber möglich ist: alles liefern lassen und dann selber filtern.
Genau DAS wollte ich ja vermeiden. Grund des Ganzen: Ich brauche eine Funktion HoleNaechsteDatei, um ausgehend von der aktuell geladenen Datei die "nächste" Datei im Verzeichnis dieser geladenen Datei zu suchen (wobei die aktuell geladene Datei nicht über eine Suche gefunden sondern manuell vom Anwender geladen wurde). Dafür gibt es nun verschiedene Möglichkeiten:

1. Im Verzeichnis der aktuell geladenen Datei alle Dateien des gewünschten Dateityps suchen und dann in einer eigenen Liste SLNaechsteDateien speichern. Wenn der Anwender die Funktion "Lade nächste Datei im Verzeichnis der aktuell geladenen Datei" ausführt, wird die nächste Datei aus der Liste SLNaechsteDateien geladen und der Listeneintrag dann gelöscht, usw.
Diese Methode hat einige Nachteile:
a) Die Liste könnte nicht mehr aktuell sein, weil unterdessen Dateien im Verzeichnis etwa gelöscht wurden.
b) Aufwändige und fehleranfällige Verwaltung der Liste: Wenn der Anwender manuell eine Datei aus einem anderen Verzeichnis lädt, muss die Liste zurückgesetzt und neu eingelesen werden, usw.

2. Wenn der Anwender die Funktion "Lade nächste Datei im Verzeichnis der aktuell geladenen Datei" ausführt, sucht das Programm mit FindFirst und der Dateimaske des gewünschten Dateityps im Verzeichnis der aktuell geladenen Datei und lädt die gefundene Datei. SearchRecord wird in einer globalen Variable gespeichert, sodass beim nächsten Ausführen der Funktion "Lade nächste Datei im Verzeichnis der aktuell geladenen Datei" nur mehr FindNext mit der vorher initiierten globalen Variable SearchRecord aufgerufen werden muss.
Vorteil:
a) FindNext findet nur real existierende Dateien (s. Nachteil 1a).
Nachteil:
b) Ebenso aufwändige Verwaltung, da irgendwann FindClose aufgerufen werden und immer wieder überprüft werden muss, ob SearchRecord noch geöffnet bzw. das Searchhandle noch gültig ist.

3. Meine ursprüngliche Absicht - die sich nun wohl als unrealistisch herausgestellt hat - war: Mit FindFirst nach der aktuell geladenen Datei suchen und dann FindNext mit der Dateimaske des gewünschten Dateityps ausführen:

Delphi-Quellcode:
// Prototyp:
function HoleNaechsteDatei: string;
var
  SR: TSearchRec;
begin
  SearchDir := VerzeichnisDerAktuellGeladenenDatei;
  if FindFirst(SearchDir + AktuellGeladeneDatei, faAnyFile, SR) = 0 then
  begin
    AendereDateimaske; // <<<<< nicht möglich!?
    if FindNext(SR) = 0 then
      DateiLaden(SR.Name);
    FindClose(SR);
  end;
end;
Welche Methode würdet ihr bevorzugen?

[Edit: Schreibfehler korrigiert]
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:16
Guten Abend,
vielleich geht es so?
Delphi-Quellcode:
// auch ein Prototyp:
function HoleNaechsteDatei: string;
var
  SR: TSearchRec;
begin
  SearchDir := VerzeichnisDerAktuellGeladenenDatei;
  if FindFirst(SearchDir + AktuellGeladeneDatei, faAnyFile, SR) = 0 then
  begin
    FindClose(SR);
    AendereDateimaske; // <<<<< nicht möglich!?
    if FindFirst(AndereDateimaske,faAnyFile,SR) = 0 then
    //if FindNext(SR) = 0 then
      DateiLaden(SR.Name);
    FindClose(SR);
  end;
end;

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:20
Zitat von Klaus01:
Guten Abend,
vielleich geht es so?
Leider nein - diese Funktion wird immer das selbe Ergebnis liefern ...
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#14

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:25
Zitat:
Welche Methode würdet ihr bevorzugen?
Von der aktuell gefundenen Datei den Pfad abtrennen und damit ein neues FindFirst anstoßen. Vorher jedoch FindClose aufrufen. Zur Sicherheit den Dateinamen im Speicher halten, falls FindFirst als erstes Ergebnis die Originaldatei liefern sollte. Falls das der Fall sein sollte, mit FindNext die nächste Datei holen.

Weiß nicht, ob ich dich jetzt richtig verstanden habe...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:30
Zitat von Daniel G:
Von der aktuell gefundenen Datei den Pfad abtrennen und damit ein neues FindFirst anstoßen. Vorher jedoch FindClose aufrufen. Zur Sicherheit den Dateinamen im Speicher halten, falls FindFirst als erstes Ergebnis die Originaldatei liefern sollte. Falls das der Fall sein sollte, mit FindNext die nächste Datei holen.
Meinst du den gleichen Vorschlag wie Klaus01? Das würde jedoch immer das selbe Ergebnis liefern, weil ein neues FindFirst (nach vorherigem FindClose) immer an der gleichen Stelle wie das vorherige FindFirst beginnt.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#16

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:33
Zitat von PeterPanino:
Das würde jedoch immer das selbe Ergebnis liefern.
Nee, Klaus01 hatte vergessen, den Dateinamen Dateipfad im Speicher zu halten, und ggf. bei Übereinstimmung erneut FindNext aufzurufen. Dann ist das Ergebnis nicht mehr dasselbe.

Aber vom Prinzip ist der Weg gleich ja, bis auf die Sache mit dem Namen Pfad und dem entsprechenden Vergleich.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#17

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 17:43
> Verzeichnisinhalt (gefiltert) auflisten
> Verzeichnisüberwachung einrichten
> > wird datei gelöscht, dann wird sie auch aus der Liste gelöscht (wenn sie da drinnen ist)
> > wird eine Datei erstellt/reinkopiert, dann wird sie mit der Suchmaske verlichen und wenn es stimmt, dann wird sie an die Liste angehängt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 18:11
Habe gerade den Vorschlag von Klaus01 und Daniel G probiert - funktioniert leider nicht:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Verzeichnis, das mehrere JPG-Dateien enthält:
  Form1.Caption := 'F:\test\test1.jpg';
end;

procedure TForm1.btnGetNextFileClick(Sender: TObject);
var
  SR: TSearchRec;
begin
  if FindFirst(Form1.Caption, faAnyFile, SR) = 0 then
  begin
    FindClose(SR);
    if FindFirst('F:\test\*.jpg', faAnyFile, SR) = 0 then
      Form1.Caption := 'F:\test\' + SR.Name;
    FindClose(SR);
  end;
end;
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 18:16
Zitat von Daniel G:
Nee, Klaus01 hatte vergessen, den Dateinamen Dateipfad im Speicher zu halten, und ggf. bei Übereinstimmung erneut FindNext aufzurufen. Dann ist das Ergebnis nicht mehr dasselbe.
Aber dann wird halt mit FindNext immer wieder die selbe Datei gefunden!
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#20

Re: Suchmaske nach FindFirst verändern?

  Alt 21. Nov 2009, 18:23
Jetzt hab ich erst gerafft, was du willst...

Der Vorschlag von Himi, mit der Überwachung des Verzeichnis, dürfte dich zum Ziel führen...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz