Scherereien mit Findfirst

jrx

Mitglied
Hallo Zusammen,

Das folgende Programm macht nicht was es soll.
Alle Unterverzeichnisse und Dateien werden angezeigt. Vor den Verzeichnissen gibt es aber keine "Dir:" Ausgabe.
Das Programm scheint Info.Attr nicht auszuwerten.

Wo liegt mein Denkfehler? :confused:
Am Freepascal unter Linux wird's wahrscheinlich nicht liegen. :)

Vielen Dank für euer Feedback.

Jan-Rene'

Code:
uses  Sysutils;

procedure GetFileStrukture;
var Info:TSearchRec;
begin
	if FindFirst('*',faAnyFile, Info)=0 Then begin
		repeat
			if Info.Attr=SysUtils.FaDirectory Then Write('DIR: ');
			WriteLn(Info.Name);
		until FindNext(Info)<>0;
	end;
	FindClose(Info);
end;

begin
	GetFileStrukture;
end.
 
Hallo vop,

Danke, jetzt geht es.

Aber verstanden habe ich es nicht wirklich.
In meiner Vorstellung hat ja die Variable Info.Attr in jeder Schleife den Wert der gerade gefundenen Datei/Verzeichnis (oder was es sonst noch so gibt).
Deshalb sollte ja meine Variante eigentlich funktionieren.
Da liege ich wohl daneben. Vielleicht kriege ich noch einen Tip?

Jan-Rene'
 
Zum Verständnis:

Die Variable Attr ist eigentlich die Kombination mehrere Variablen, die jeweils durch Bits represäntiert werden.

Attr entspricht dabei der Zahl aller gesetzter Bits.

Für dich ist nur entscheidend, ob das Bit "Unterverzeichnis" gesetzt ist.

Mit einer AND-Verknüpgung kann man gezielt einzelne Bits erfragen.

Soweit klar? Wenn nein, mach Dich einmal mit dem Binärsystem vertraut.

vop
 
Alles Klar!
Ich habe über die Sache nachgedacht, der Groschen hätte bei mir fallen müssen, weil ich ja auch an Findfirst die zusammengesetzte Variable übergeben habe.

Danke. Jan-René
 

Neue Beiträge

Zurück