Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Inhalt eines Ordners auslesen (https://www.delphipraxis.net/131777-inhalt-eines-ordners-auslesen.html)

chilledcroete 30. Mär 2009 22:29


Inhalt eines Ordners auslesen
 
Hallo

Ich würde gerne den Inhalt eines Ordners auslesen, d.h eine Stringliste mit allen Datei und Ordnernamen erhalten, die der zu durchsuchende Ordner enthält.
Am liebsten wäre mit eine Funktion, die wie der Befehl "dir /b" unter DOS/Eingabaufforderung arbeitet.

Vielen Danke schon mal im Voraus!

Mithrandir 30. Mär 2009 22:41

Re: Inhalt eines Ordners auslesen
 
Willkommen :dp:

Ich denke, ich spreche für die Mehrheit hier, wenn ich sage, dass es sehr geschätzt wird, wenn man sich selbst auf die Suche macht. Dann findet man zum Bleistift aus der Codelib dies hier:

http://www.delphipraxis.net/internal...ct.php?t=33031

Gruß,
Daniel

chilledcroete 31. Mär 2009 12:33

Re: Inhalt eines Ordners auslesen
 
Ich habe auch schon selber gesucht und einen ähnlichen Code gefunden.
Leider läuft sowohl dein Code, als auch der, den ich gefunden habe bei mir nicht.
Es wird ein Fehler ausgegeben, das die Funktion "DirectoryExist()" unbekannt ist. Ich glaube das liegt daran, dass ich bei Uses nicht Variant einfügen kann, da sie bei mir nicht installiert ist.
Ich benutze Delphi 5
Leider kann ich auch keine zusätzlichen Komponenten etc. installieren, da der Code auch in der Schule laufen sollte.
Hat jemand eine Idee, wie ich mein Problem lösen könnte? Ich würde mich sehr über einen Ansatz freuen.

Bernhard Geyer 31. Mär 2009 12:39

Re: Inhalt eines Ordners auslesen
 
DirectoryExist liegt in der Unit SysUtils. Dies hätte dir ein Blick in die Online-Hilfe auch gesagt. Variant.pas gibt es erst ab D6, so das du i.d.R. diese Uses-Anweisung bei D5 einfach weg lassen kannst.

chilledcroete 31. Mär 2009 12:52

Re: Inhalt eines Ordners auslesen
 
Nein die Funktion liegt in der Unit FileCtrl. Das Programm funktioniert aber auch zur Laufzeit nicht. Es stürzt ab und im Taskmanager steht, das es keine Rückmeldung mehr liefert.

Gibt es nicht eine einfach Fuktion wie "Dir" für DOS?

Mithrandir 31. Mär 2009 13:04

Re: Inhalt eines Ordners auslesen
 
Das könnte aber auch andere Gründe haben. Der Source würde uns hier bei der Suche sicher helfen. ;)

Bernhard Geyer 31. Mär 2009 13:05

Re: Inhalt eines Ordners auslesen
 
Zitat:

Zitat von chilledcroete
Nein die Funktion liegt in der Unit FileCtrl.

Ok, In D5 wars noch in der anderen Unit.

Zitat:

Zitat von chilledcroete
Das Programm funktioniert aber auch zur Laufzeit nicht. Es stürzt ab und im Taskmanager steht, das es keine Rückmeldung mehr liefert.

Was nun? Stürzt es ab oder sagt der taskmanager das keine Rückmeldungen mehr kommen. Durchsuchst du nämlich einen großen Verzeichnisbaum könnte sowas der Task Manager schon behaubten weil das programm beschäftigt ist.

Die Funktion aus der CodeLib funktioniert jedenfalls.

Zitat:

Zitat von chilledcroete
Gibt es nicht eine einfach Fuktion wie "Dir" für DOS?

Ja. Siehe CodeLib-Beispiel. Oder nimm das Control TShellListView aus der Reiterseite "Beispiele" wenns nur für ein Verzeichnis ist.

jaenicke 31. Mär 2009 13:06

Re: Inhalt eines Ordners auslesen
 
Zitat:

Zitat von chilledcroete
Das Programm funktioniert aber auch zur Laufzeit nicht. Es stürzt ab und im Taskmanager steht, das es keine Rückmeldung mehr liefert.

Das dürfte daran liegen, dass es einfach die Unterordner mit einbeziehen soll und das dauert eben eine ganze Weile.

Wenn kein Application.ProcessMessages drin steht, dann reagiert das Programm derweil eben nicht mehr.

// EDIT:
DirectoryExists gibt es in SysUtils und FileCtrl:
http://docs.codegear.com/products/ra...oryExists.html

Matze 31. Mär 2009 13:10

Re: Inhalt eines Ordners auslesen
 
Es gibt auch Möglichkeiten, bei denen du angeben kannst, ob Unterverzeichnisse (rekursiv) durchsucht werden sollen (achte auf das eingeklammerte Wort. ;) ).
"dir" durchsucht keine Unterverzeichnisse, daher gehe ich davon aus, dass du das auch nicht haben möchtest.

Grüße

seim 31. Mär 2009 14:02

Re: Inhalt eines Ordners auslesen
 
Delphi-Quellcode:
function ReadDir(Path, Mask: string; ShowDir, ShowFiles, ShowPath: boolean): TStringlist;
var SRec: TSearchRec;
    DateiListe: TStringList;
begin
  DateiListe := TStringList.Create;

  if Path[length(Path)] <> '\' then
    Path:=Path+'\';

  if ShowDir AND Showfiles then
    FindFirst(Path + Mask, faAnyFile, SRec)
  else if ShowFiles then
    FindFirst(Path + Mask, not faDirectory, SRec)
  else if ShowDir then
    FindFirst(Path + Mask, faDirectory, SRec);

  if (SRec.Name <> '.') AND (SRec.Name <> '..') AND (SRec.Name <> '') then
  begin
    if ShowPath then
      DateiListe.Add(Path + SRec.Name)
    else
      DateiListe.Add(SRec.Name);
  end;
  while FindNext(SRec) = 0 do
  begin
    if (SRec.Name <> '.') AND (SRec.Name <> '..') AND (SRec.Name <> '') then
    begin
      if ShowPath then
        DateiListe.Add(Path + SRec.Name)
      else
        DateiListe.Add(SRec.Name);
    end;
  end;
  FindClose(SRec);
  Result := DateiListe;
end;
Allerdings nicht Rekursiv.. wenn du das selbst einbaust kannste ja den Code uppen :zwinker:

Delphi-Quellcode:
VerzInhalt:= ReadDir(dir,'*.*',false,true,true);


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.
Seite 1 von 2  1 2      

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