Einzelnen Beitrag anzeigen

Gravitar

Registriert seit: 8. Okt 2006
94 Beiträge
 
Delphi 7 Enterprise
 
#1

Verzeichnisliste mit definierter Rekursionstiefe erstellen

  Alt 28. Mai 2009, 21:14
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
  Mit Zitat antworten Zitat