Hi,
da ich mir vor kurzem die Finger gebrochen habe, um unter Vista eine Verzeichnisliste (nur Ordner) auszugeben, habe ich hier eine kleine Konsolen-Anwendung geschrieben.
Syntax: Verzeichnisliste <Startverzeichnis> <Outputdatei> <maximale Baumtiefe>
Das Programm legt nach Durchlauf die Outputdatei an (reine Textdatei). Diese enthält dann die Ordner, die je nach Tiefe entsprechend eingerückt sind.
Hier der Code (recht übersichtlich):
Delphi-Quellcode:
program Verzeichnisliste;
{$APPTYPE CONSOLE}
uses
SysUtils,strutils,classes;
const
//Um das Programm zu tracen,debuggen sollte Test = true gesetzt werden
//Dadurch sind keine Kommandozeilenparameter notwendig, sondern es werden
//Standardwerte gesetzt.
Test = false;
var
ProtDatei : TStringList;
ProtDateiName :
string;
MaxRek,Rekursionstiefe,x : integer;
Einrueckstring :
string = '
';
Verzeichnis : ansistring;
Procedure IsFileInDirectory(ADirectory:
string; max: integer);
var
SR: TSearchRec;
begin
if (ADirectory<>'
')
and (ADirectory[length(ADirectory)]<>'
\')
then
ADirectory:=ADirectory+'
\';
if (FindFirst(ADirectory+'
*.*',faDirectory,SR)=0)
and
(rekursionstiefe < max)
then
begin
repeat
if (SR.
Name<>'
.')
and (SR.
Name<>'
..')
and (sr.Attr
and faDirectory = faDirectory)
then
begin
if rekursionstiefe = 0
then ProtDatei.Add('
');
ProtDatei.add(leftstr(einrueckstring,Rekursionstiefe*2)+sr.
name);
inc(Rekursionstiefe);
IsFileInDirectory(ADirectory+SR.
Name,max);
end;
until FindNext(SR)<>0;
FindClose(SR);
end;
dec(Rekursionstiefe);
end;
begin
writeln('
Verzeichnisliste (c) 2009 Andreas Welzien');
writeln;
writeln('
Erzeugt eine Liste aller Verzeichniss ab dem angegebenen Pfad (z.B. c:\).');
writeln('
Die Ausgabe erfolgt in der definierten Outputdatei (z.B. Liste.txt).');
writeln('
Über maximale Ordnertiefe (optional) kann die maximale Hierarchietiefe vorgegeben werden.');
writeln('
Wird dieser Parameter nicht vorgegeben, wird immer bis zur maximalen Tiefe reportet.');
writeln;
writeln('
Aufruf: Verzeichnisliste.exe <Pfad> <Outputdatei> {<maximale Ordnertiefe>}');
if test
then
begin
Verzeichnis := '
c:\';
ProtDateiName := '
test.txt';
maxrek := 2;
end
else
begin
Verzeichnis := paramstr(1);
ProtDateiName := paramstr(2);
maxrek := strtoint(paramstr(3));
end;
ProtDatei := TStringList.Create;
Rekursionstiefe := 0;
IsFileinDirectory(Verzeichnis,maxrek);
protdatei.SaveToFile(ProtDateiName);
protdatei.Free;
end.
Falls noch jemand Verbesserungspotential entdeckt, nur zu. Ich freue mich auf jede Anregung.
Gruß, Andreas