Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien und Ordner auflisten als XML (https://www.delphipraxis.net/129556-dateien-und-ordner-auflisten-als-xml.html)

SaFu 21. Feb 2009 00:31


Dateien und Ordner auflisten als XML
 
Abend,

Und zwar habe ich folgendes Problem, ich möchte gerne Ordner und die darin liegenden Dateien auflisten lassen und zwar in einer XML Strucktur.

Wenn ich z.b. so eine Ordnerstrucktur habe
Delphi-Quellcode:
Ordner1
 -MeineDatei1
 -MeineDatei2
 -MeineDatei3
 
 -Ordner2
  -DeineDatei1
  -DeineDatei2
  -DeineDatei3
  -DeineDatei4
 
 -Ordner3
  -SeineDatei1
  -SeineDatei2
Dann muss ich jetzt per FindFirst und FindNext alle Ordner und Dateien ermitteln.

Aber wie bekomme ich als ergebnis diese Strucktur

Im Hauptverzeichnis Ordner1

Delphi-Quellcode:
<files> // dieses File nur im obersten Ordner anstatt des Ordnernamens
 <FileName>MeineDatei1</fileName>
 <FileName>MeineDatei2</fileName>
 <FileName>MeineDatei3</fileName>
</files>

<Ordner2> // hier der Ordnername weil es ein Unterverzeichnis ist
 <FileName>Ordner2/MeineDatei1</fileName>
 <FileName>Ordner2/MeineDatei2</fileName>
 <FileName>Ordner2/MeineDatei3</fileName>
 <FileName>Ordner2/MeineDatei4</fileName>
</Ordner2>

<Ordner3> // hier der Ordnername weil es ein Unterverzeichnis ist
 <FileName>Ordner3/MeineDatei1</fileName>
 <FileName>Ordner3/MeineDatei2</fileName>
</Ordner3>
usw.

So bekomme ich alle Dateien aufgelistet aber nur ohne die Unterverzeichnisse

Delphi-Quellcode:
procedure FileList(const APath, AExt: string; ARecurse: Boolean; AList: TStrings);
var
  F   : TSearchRec;
  Path : string;
begin
  Path := IncludeTrailingPathDelimiter(APath); // nur für Delphi 4 und höher!
  if (ARecurse) and (FindFirst(Path + '*.*', faAnyFile, F) = 0) then
  try
    repeat
      if (F.Name <> '.') and (F.Name <> '..') and ((F.Attr and faDirectory) = faDirectory) then
        FileList(Path + F.Name, AExt, ARecurse, AList);
    until
     FindNext(F) <> 0;
  finally
    FindClose(F);
  end;
  if FindFirst(Path + AExt, faAnyFile, F) = 0 then
  try
    repeat
      if (F.Name <> '.') and (F.Name <> '..') and ((F.Attr and faDirectory) <> faDirectory) then
        AList.Add(Path + F.Name);
    until
     FindNext(F) <> 0;
  finally
    FindClose(F);
  end;
end;

procedure TfrmTemplateerstellen.btn1Click(Sender: TObject);
var i: integer;
s :TStringList;
begin
  s:= TStringList.Create();
  try
    Mmo1.Lines.BeginUpdate;
    try
      Mmo1.Lines.Clear;
      FileList(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)) + edtDirectoryName.Text) ,'*.*',True,s);
      for i := 0 to Pred(s.Count) do
        Mmo1.Lines.Add('<filename>'+ExtractFileName(s[i])+'</filename>');
    finally
      Mmo1.Lines.EndUpdate;
    end;
  finally
    s.Free;
  end;
end;
Danke im voraus

Luckie 21. Feb 2009 01:01

Re: Dateien und Ordner auflisten als XML
 
Rat mal wofür der Parameter ARecurse steht... ;)

DeddyH 21. Feb 2009 08:25

Re: Dateien und Ordner auflisten als XML
 
Der steht aber auf true.

haentschman 21. Feb 2009 08:41

Re: Dateien und Ordner auflisten als XML
 
Hallo Sascha, :hi:

vieleicht nicht das eleganteste:

- in FileListbox1 alle Ordner auflisten in FileListBox2 den Inhalt des Ordners dazu.
- beim Erzeugen der XML die File Listboxen durchlaufen und in die entsprechende Form bringen
- Wenn der Index der FileListBox1 auf 0 steht trägst du als Wert einfach was anderes ein als den Ordnernamen.
...der erste Eintrag soll ja anders sein oder ? :gruebel:

bis dann...

DeddyH 21. Feb 2009 08:47

Re: Dateien und Ordner auflisten als XML
 
Jetzt hab ich das Problem erst verstanden :wall:
Delphi-Quellcode:
procedure TfrmTemplateerstellen.btn1Click(Sender: TObject);
var i: integer;
    s :TStringList;
    sPath: string;
begin
  s:= TStringList.Create();
  try
    Mmo1.Lines.BeginUpdate;
    try
      Mmo1.Lines.Clear;
      sPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)) + edtDirectoryName.Text);
      FileList(sPath ,'*.*',True,s);
      for i := 0 to Pred(s.Count) do
        Mmo1.Lines.Add('<filename>'+Copy(s[i],Length(sPath) + 1,Length(s[i]))+'</filename>');
    finally
      Mmo1.Lines.EndUpdate;
    end;
  finally
    s.Free;
  end;
end;
Ungetestet.

haentschman 21. Feb 2009 13:37

Re: Dateien und Ordner auflisten als XML
 
Zitat:

Jetzt hab ich das Problem erst verstanden
...du glücklicher ! :gruebel: :P

SaFu 21. Feb 2009 13:46

Re: Dateien und Ordner auflisten als XML
 
Danke genau so war es gemeint


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz