Autor Beitrag
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 29.07.03 15:12 
:autsch: manchmal sieht man halt den wald vor lauter bäumen nicht. FindFirst und FindNext sind DIE LÖSUNG!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 29.07.03 15:34 
Na da war ich wohl zu schnell. Ich raff das nicht so ganz mit FindFirst, FindNext und FindClose.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 29.07.03 15:53 
nach ein paar modifikationen könnte das funktionieren :wink:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 29.07.03 16:02 
So klappts. man muss wildcards eingeben um mit findnext was zu finden.
:mahn:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.Button1Click(Sender: TObject);
var
  sRec: TSearchRec;
  dir: String;
  Attr: Integer;
begin

dir := 'c:\*.*';
Attr := faAnyFile;

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;
end;



:beer: Danke!
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 29.07.03 16:23 
Und warum schreibst du den Schleifen-Code doppelt?

Mit repeat until braucht man den nur einmal:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden 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=0do begin
      ShowMessage(SearchRec.Name); 
      FindRes := FindNext(SearchRec);
    end;
  finally 
    FindClose(SearchRec); 
  end;
end;


So hat jeder seine vorlieben ;)

Gruß
Klabautermann
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 29.07.03 16:47 
Oh sorry, hab nicht genau hingegugt. Du hast ja eine Fußgesteuerte Schleife verwendet :nut:
lemming Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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