Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DateiAttribute aus ListBox auslesen (https://www.delphipraxis.net/8937-dateiattribute-aus-listbox-auslesen.html)

Gregor00 15. Sep 2003 15:54


DateiAttribute aus ListBox auslesen
 
Hallo,

also ich sitzt hier vor folgendem Problem: Ich hab ein Dateiensuchprogramm geschrieben dessen Ergebnisse in eine Listbox geladen werden. jetzt möchte ich die Attribute auslesen, was an sich auch kein Problem ist, wenn man einen festen Pfad angeben kann. da ich jedoch keine festen Pfade angeben kann funktioniert das nicht.
Hier als kleiner Hinweis was ich meine der Quellcode der Suchfunktion;
Wenn gewünscht kann ich den Source dür die Suchfunktion angeben, glaube aber das ist für das problem nicht nötig :shock:

Also thx für alle antworten schon mal....
greg

Tpercon 15. Sep 2003 16:09

Re: DateiAttribute aus ListBox auslesen
 
Was steht den in der ListBox drin?

Gregor00 15. Sep 2003 16:16

Re: DateiAttribute aus ListBox auslesen
 
in der Listbox stehen die Dateinamen mit Endung (z.b. blablabla.txt) (untereinander). Auf Wunsch kann der Pfad (z.B c:\Eigene Dateien\blablabla.txt) mit angegeben werden...

greg

Tpercon 15. Sep 2003 16:19

Re: DateiAttribute aus ListBox auslesen
 
Dann speicher dir den Pfad doch in irgend einer Variablen! Somit hast du dann wieder der kompletten Dateinamen.

Gregor00 17. Sep 2003 17:39

Re: DateiAttribute aus ListBox auslesen
 
also irgentwie klappt das doch noch nicht so ganz... muss nochmal einen schritt zurück gehen: das programm soll alle Unterordner eines vorher vorgegebenen Pfades einer bestimmten Endung anzeigen
Der volgende Quelltext zeigt wie ich es versucht habe, es klappt jedoch nicht (:

Delphi-Quellcode:
procedure TForm1.Suche (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
  begin
    If (sr.Attr <> 0) and (faDirectory <> 0) then
      begin
    Suche(ext, Edit2.Text + '\' + sr.Name);
    ListBox2.Items.Add(pfad + '\' + sr.Name);
    end
    else
   //  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;
Edit1 gibt die Dateiendung an (z.B. TXT)
Edit2 den Pfad
ListBox1 soll alle gefundenen Dateien aufführen,
ListBox2 alle durchsuchten/gefundenen ordner



ein Klick auf Button1 startet den Suchvorgang:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

Button1.Enabled:= False;
ListBox1.Clear;
ListBox2.Clear;
Suche(Edit1.Text, Edit2.text);
Button1.Enabled:= True;

end;
ich hoffe ihr könnt mir helfen, jab schon alles mögliche versucht :oops:

thx
gregor

Christian Seehase 17. Sep 2003 17:51

Re: DateiAttribute aus ListBox auslesen
 
Moin Gregor,

ich hab' Deine Methode Suche mal überarbeitet und kommentiert


Delphi-Quellcode:
procedure TForm1.Suche (ext: string; pfad: String);
var sr: TSearchRec;
    r: Integer;

begin
  r:= FindFirst( pfad + '\*.*', faAnyFile,sr);
  if r = 0 then begin // nur wenn FindFirst erfolgreich war, gibt's auch was zu schliessen
    try // Resourcenschutzblock eingebaut
      while r = 0 do
      begin
        // falsch, da ein Datei-/Verzeichnisname auch mit . beginnen kann
        // es muss explizit auf . und .. geprüft werden
//        If Copy(sr.Name, 1, 1) <> '.' then
      if (sr.Name <> '.') and (sr.Name <> '..') then
      begin
        // gefundenes Attribut ausmaskieren und mit gewünschtem vergleichen
        if (sr.Attr and faDirectory) = faDirectory then
//        If (sr.Attr <> 0) and (faDirectory <> 0) then
          begin
        Suche(ext, Edit2.Text + '\' + sr.Name);
        ListBox2.Items.Add(pfad + '\' + sr.Name);
        end
        else
        if AnsiUpperCase(ExtractFileExt(sr.Name)) = '.'+AnsiUpperCase(ext) then
       //  If System.Copy (sr.Name, Pos('.' , sr.Name), 4) = '.' + ext then
        ListBox1.Items.Add(pfad + '\' + sr.Name);
      end;
      Application.ProcessMessages;
      r:= FindNext(sr);
      end;
    finally
      FindClose(sr);
    end;
  end;
end;
das mit dem str3 hab' ich nicht verstanden.
Extensions können beliebig lang sein.

Gregor00 17. Sep 2003 21:40

Re: DateiAttribute aus ListBox auslesen
 
ok danke für die antwort hab's ausprobiert funtioniert bis jetzt ganz gut :lol:

mit dem Str3 hab ich halt gemacht, weil die Dateiendungen nicht mehr als 3 Ziffern haben dürfen (bzw. vom benutzer angegeben werden dürfen).

Wenn ich jetzt dur den Sngegebenen Ordner durchsuchen lassen will (also ohne Unterordner) kann ich da die gleiche Procedur nehmen?? oder ist es sinnfoller noch eine zweite zu deklarieren??
Stell mir das ganze so vor das der User mit Hilfe einer Checkbox zwischen "Mit Unterordner" oder "ohne Unterordner" wählen kann.

cu gregor

Christian Seehase 17. Sep 2003 21:44

Re: DateiAttribute aus ListBox auslesen
 
Moin Gregor,

dann bau in die Parameterliste noch ein Flag ein, dass die Unterscheidung ermöglicht.
In der Routine musst Du dann nur noch das Flag abfragen, und ggf. bei auftreten eines Verzeichnisses dieses nicht weiter beachten.

Gregor00 18. Sep 2003 14:56

Re: DateiAttribute aus ListBox auslesen
 
danke für den Tipp aber nen Flag will ich nicht verwenden....eine einfache Checkbox find ich einfacher...
ich hab jetzt eine zweite procedure deklariert (fast die gleiche, die
Christian Seehase mir modifiziert hat) funtioniert aber nicht PC hängt sich immer auf (muss irgentwo eine Entlosschleife sein...) könnt ihr mir nochmal helfen was genau ich ändern muss

vielen Dank
greg

Tpercon 18. Sep 2003 15:08

Re: DateiAttribute aus ListBox auslesen
 
Ganz einfach. Wenn die CheckBox markiert / das Flag entsprechend gesetzt ist, darf man nicht nach Ordnern suchen (<> faDirectory).

Ne einfache If Abfrage sollte wohl jeder hinbekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 1 von 2  1 2      

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