| Autor |
Beitrag |
lemming
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 15:07
Hallo!
Ich habe in dem unterverzeichnis /projects meines progs mehrere Dateien die *.prj heissen. Wie kann ich diese mir auflisten lassen?
btw. Es ist eine CLX Anendung und sollte ohne viel gefummele später auch auf Linux laufen.
-lemmi
Zuletzt bearbeitet von lemming am Mi 30.07.03 08:51, insgesamt 1-mal bearbeitet
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 15:12
 manchmal sieht man halt den wald vor lauter bäumen nicht. FindFirst und FindNext sind DIE LÖSUNG!
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 29.07.03 15:20
*g*
Jaja, man denkt so gerne zu kompliziert.
Interessant wird es dann wenn du Linux-Spezifische informationen (z.B. Dateirechte) auslesen willst.
Gruß
Klabautermann
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 15:34
Na da war ich wohl zu schnell. Ich raff das nicht so ganz mit FindFirst, FindNext und FindClose.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var sr: TSearchRec; begin FindFirst('c:\', 63, sr); repeat ShowMessage(sr.Name); until FindNext(sr) <> 0; FindClose(sr); end; |
ich hab hier diesen code jetzt. Zum testen nehm ich jetzt halt mal c:\. Aber der gibt mir nix zurück. Hab ich was mit denn Attributes falsch gemacht? Das ist die 63. Hab ich mir mal chnell ausgerechnet.[/code]
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 29.07.03 15:53
nach ein paar modifikationen könnte das funktionieren
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| if FindFirst(dir, Attr, sRec) = 0 then begin if (sRec.Attr and Attr) = sRec.Attr then begin showMessage(sRec.Name); end; while FindNext(sRec) = 0 do begin if (sRec.Attr and Attr) = sRec.Attr then begin showMessage(sRec.Name); end; end; FindClose(sRec); end; |
PS: Attr ist die attribut-maske und dir zb. 'c:\'
_________________ mfg.
mâximôv
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 16:02
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Di 29.07.03 16:23
Und warum schreibst du den Schleifen-Code doppelt?
Mit repeat until braucht man den nur einmal:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if FindFirst(Pfad, Attr, SearchRec) = 0 then try repeat ShowMessage(SearchRec.Name); until FindNext(SearchRec) <> 0; finally FindClose(SearchRec); end; |
Ein Try-Finally sollte bei FindFirst nicht fehlen. Es ist auch nicht gut, wenn FindClose aufgerufen wird, wenn FindFirst 0 zurück liefert, da es sonst zum Überschreiben von Speicher kommen kann (ein Bug in Windows).
_________________ Ist Zeit wirklich Geld?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 29.07.03 16:38
Hallo,
| AndyB hat folgendes geschrieben: | Und warum schreibst du den Schleifen-Code doppelt?
Mit repeat until braucht man den nur einmal: |
dann hast du aber das Problem, das es zu fehlern kommt, wenn keine Datei gefunden wird, daher benötigst du die zusätzliche IF Bedingung. Daher würde ich eine Kopfterminite-Schleife mit Hilfsvariable bevorzugen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| VAR FindRes : LongInt; begin FindRes := FindFirst(Pfad, Attr, SearchRec); try while (FindRes=0) do begin ShowMessage(SearchRec.Name); FindRes := FindNext(SearchRec); end; finally FindClose(SearchRec); end; end; |
So hat jeder seine vorlieben
Gruß
Klabautermann
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Di 29.07.03 16:43
| Klabautermann hat folgendes geschrieben: | | dann hast du aber das Problem, das es zu fehlern kommt, wenn keine Datei gefunden wird |
Hää? Das kann ich nicht nachvollziehen.
Wenn keine Datei gefunden wird, liefert FindFirst <> 0 zurück, wodurch der try/finally Block nicht ausgeführt wid. Wenn eine Datei gefunden wurde, wird der Schleifen-Körper ausgeführt. Nun kommt FindNext. Wird keine Datei gefunden, liefert FindNext <> 0 zurück und die Schleife wird beendet, wodurch auf FindClose ausgeführt wird. Findet FindNext eine Datei/Ordner, so wird der Schleifenkörper erneut ausgeführt.
| Zitat: | | So hat jeder seine vorlieben |
Darüber lässt sie eben nicht streiten. Aber man kann trotzdem seinen Stil anderen Zeigen. Vielleicht gefällt einem der ja besser oder auch nicht.
_________________ Ist Zeit wirklich Geld?
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 16:46
²AndyB
| Zitat: | | Wenn eine Datei gefunden wurde, wird der Schleifen-Körper ausgeführt |
wo wir schon mal die erste Datei verpasst hätten. 
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 16:47
Oh sorry, hab nicht genau hingegugt. Du hast ja eine Fußgesteuerte Schleife verwendet 
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Di 29.07.03 16:50
²AndyB,
es kommt wirklich zu keinem Fehler wenn keine Dateien gefunden wurden. Danke für diese elegante Lösung 
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 29.07.03 17:23
Hallo,
| AndyB hat folgendes geschrieben: | | Klabautermann hat folgendes geschrieben: | | dann hast du aber das Problem, das es zu fehlern kommt, wenn keine Datei gefunden wird |
Hää? Das kann ich nicht nachvollziehen. |
bitte weiterlesen:
| Kalabautermann hat folgendes geschrieben: | | dann hast du aber das Problem, das es zu fehlern kommt, wenn keine Datei gefunden wird, daher benötigst du die zusätzliche IF Bedingung. |
Das deine lösung funktioniert ist unumstritten.
| AndyB hat folgendes geschrieben: | | Darüber lässt sie eben nicht streiten. Aber man kann trotzdem seinen Stil anderen Zeigen. Vielleicht gefällt einem der ja besser oder auch nicht. |
Das sollte auch keine Kritik an deinem Postings sein. Es war nur eine allgemeine und nicht wertende feststellung. Ich war nur erfreut wie viele korreckte Lösungen lemming hier geboten bekommt.
Gruß
Klabautermann
|
|