Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit "SearchRec"s (https://www.delphipraxis.net/71335-probleme-mit-searchrec-s.html)

qb-tim 13. Jun 2006 13:34


Probleme mit "SearchRec"s
 
Here ist ein Auszug aus einem meiner Programme.

Noch vorab: Es gibt 4 Ebenen: 1. - 3. Ebene NUR Ordner und 4. Ebene NUR ".dat"-Dateien

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
var SR : TSearchrec;
begin
  if FindFirst('*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis?
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox1.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var SR : TSearchrec;
    tmp : String;
begin
  tmp := ComboBox1.Items[ComboBox1.ItemIndex] + '\*.*';
  if FindFirst(tmp, faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis?
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox2.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var SR : TSearchrec;
    tmp : String;
begin
  tmp := ComboBox1.Items[ComboBox1.ItemIndex] + '\' + ComboBox2.Items[ComboBox2.ItemIndex] + '\*.*';
  if FindFirst(tmp, faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis?
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox3.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;
In der ersten Prozedur (OnActivate) funktioniert die auflistung der Vorhandenen Ordner im Ordner der exe-Datei.

Leider passiert bei den anderen zweien nichts. Es werden keine Ordner aufgelistet!

Angel4585 13. Jun 2006 13:57

Re: Probleme mit "SearchRec"s
 
probier mal anstatt combobox.Items[combobox.itemindex], combobox.text zu nehmen ;)

qb-tim 13. Jun 2006 14:00

Re: Probleme mit "SearchRec"s
 
Ahh! Wieso habe ich das nicht gemerkt?

"TComboBox.Items[TComboBox.ItemIndex]" ist der Eintrag, der gerade markiert ist und "TComboBox.Text" ist der Text, der gerade angezeigt wird...

richtig? :-D

himitsu 13. Jun 2006 14:01

Re: Probleme mit "SearchRec"s
 
Zitat:

Zitat von qb-tim
In der ersten Prozedur (OnActivate) funktioniert die auflistung der Vorhandenen Ordner im Ordner der exe-Datei.

Leider passiert bei den anderen zweien nichts. Es werden keine Ordner aufgelistet!

Hast du mal geprüft, was in den tmp-Variablen steht?


[add]
Zitat:

Zitat von qb-tim
richtig? :-D

Ja, aber wenn die ComboBox nur auswählbar ist ud somit immer ein Eintrag ausgewählt ist, dann sollte deinen auch funktionieren.

SirThornberry 13. Jun 2006 14:20

Re: Probleme mit "SearchRec"s
 
warum suchst du eigentlich nach "*.*"? willst du nur dateinamen aufgelistet bekommen in denen ein "." enthalten ist? Wenn dem nicht so ist und du alles aufgelistet bekommen willst solltest du nach "*" suchen

qb-tim 13. Jun 2006 14:25

Re: Probleme mit "SearchRec"s
 
Ich habe mein Programm korrigiert:

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
var SR : TSearchrec;
begin
  if FindFirst('*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis? 
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox1.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var SR : TSearchrec;
    tmp : String;
begin
  tmp := ComboBox1.Text + '\*.*';
  if FindFirst(tmp, faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis? 
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox2.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var SR : TSearchrec;
    tmp : String;
begin
  tmp := ComboBox1.Text + '\' + ComboBox2.Text + '\*.*';
  if FindFirst(tmp, faAnyFile, SR) = 0 then
    begin
      repeat
        // handelt es sich um ein Verzeichnis? 
        if (SR.Attr and faDirectory) = faDirectory then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') then
          ComboBox3.Items.Add(SR.Name);
        end;
      until
        FindNext(SR) <> 0;
      FindClose(SR); // wird benötigt um den Speicher wieder freizugeben
    end;
end;
Jetzt funktioniert es.

@ SirThornberry:

Mann kann mit "*.*" jede Datei und jeden Ordner suchen. Ein Ordner hat zwar nicht eine "extention" aber es geht eben so. (Wurde mir gesagt). Und es funktioniert! :zwinker:

himitsu 13. Jun 2006 14:29

Re: Probleme mit "SearchRec"s
 
Zitat:

Zitat von qb-tim
Mann kann mit "*.*" jede Datei und jeden Ordner suchen. Ein Ordner hat zwar nicht eine "extention" aber es geht eben so. (Wurde mir gesagt). Und es funktioniert! :zwinker:

Klar funktioniert es, denn es wird nach allem mit beliebigen Zeichen vor und nach dem Punkt gesucht ... und kein Zeichen (keine Extension vorhanden), zählt auch mit dazu.

Und ich finde es ist so (mit *.*) auch effektiver, denn wenn eh nichts anderes im zu durchsuchenden Verzeichnis enthalten ist, braucht man Windows (die WinAPI) nicht auch noch "sinnlos" eine Namensprüfung machen zu lassen.

qb-tim 13. Jun 2006 14:32

Re: Probleme mit "SearchRec"s
 
Ich glaube das kommt daher, dass im uralten DOS (noch vor Windows 3.1) für Ordner die extention ".dir" benutzt wurde.

Stimmt das, oder täusche ich mich? :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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