Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi prüfen, ob es ein Ordner ist (https://www.delphipraxis.net/36803-pruefen-ob-es-ein-ordner-ist.html)

Gina 26. Dez 2004 10:36


prüfen, ob es ein Ordner ist
 
Hallo,

ich weiß, dass diese Frage in ähnlicher Form schon öfter gefallen ist. Trotzdem würde mich eins speziell interessieren:

Ich habe in einer Listbox verschiedene Pfade als Einträge drin. Manche sind Ordner und manche Dateien. Welches ist die schnellste und zugleich sicherste Methode zu prüfen, ob es sich bei dem Eintrag um einen Ordner handelt?

Vielen lieben Dank, Gina.

Matze 26. Dez 2004 10:38

Re: prüfen, ob es ein Ordner ist
 
Evtl. einfach die Dateiendung abfragen.

Daniel 26. Dez 2004 10:42

Re: prüfen, ob es ein Ordner ist
 
Ne. Ich habe Verzeichnisse, die heißen 'starteam.install' o.ä.
Du solltest Dir über Delphi-Referenz durchsuchenFindFirst() die Attribute des jeweiligen Eintrages ermitteln lassen. Bei Verzeichnissen ist dann das Flag Delphi-Referenz durchsuchenfaDirectory gesetzt. Dieser Weg sollte zuverlässig und sauber sein.

Es geht aber auch anders: Wenn Du absolut sicher bist, dass es entweder Dateien oder Verzeichnisse sind, dann prüfe mit Delphi-Referenz durchsuchenDirectoryExists(), ob ein Eintrag ein Verzeichnis ist. Wenn nein, dann muss es ja eine Datei sein.

mirage228 26. Dez 2004 10:47

Re: prüfen, ob es ein Ordner ist
 
Hi,

ich habe hier eine bzw. zwei nützliche Funktion(en) für Dich:

Delphi-Quellcode:
  function IsDirectoryA(const Dir: string): Boolean;
  var
    F: TWin32FindDataA;
    Handle: HWnd;
  begin
    Handle := FindFirstFileA(PChar(Dir), F);
    if Handle <> INVALID_HANDLE_VALUE then
    begin
      Result := ((f.dwFileAttributes and faDirectory) = faDirectory);
      Windows.FindClose(Handle);
    end else
      Result := False;
  end;

  function IsDirectory(Dir: WideString): Boolean;
  var
    F: TWin32FindDataW;
    Handle: HWnd;
  begin
    Dir := ExcludeTrailingPathDelimiter(Dir);
    if (Win32Platform <> VER_PLATFORM_WIN32_NT) then
      Result := IsDirectoryA(Dir) else
    begin
      Handle := FindFirstFileW(PWideChar(Dir), F);
      if Handle <> INVALID_HANDLE_VALUE then
      begin
        Result := ((f.dwFileAttributes and faDirectory) = faDirectory);
        Windows.FindClose(Handle);
      end else
        Result := False;
    end;
  end;
Du musst einfach immer IsDirectory() aufrufen, um abzufragen, ob das Element ein Verzeichnis ist.

mfG
mirage228

Luckie 26. Dez 2004 10:49

Re: prüfen, ob es ein Ordner ist
 
Warum nicht die entsprechende Funktion aus der Unit FileCtrl nehmen?

Daniel 26. Dez 2004 10:52

Re: prüfen, ob es ein Ordner ist
 
Zitat:

Zitat von Luckie
Warum nicht die entsprechende Funktion aus der Unit FileCtrl nehmen?

...weil es die da zum Beispiel in Delphi 2005 nicht (mehr) gibt? Ich hatte auch nach etwas in der Richtung gesucht, aber nichts mehr gefunden.

Luckie 26. Dez 2004 10:55

Re: prüfen, ob es ein Ordner ist
 
Gibt es bestimmt. Und wenn es ein .NET Programm werden soll, wäre die WinAPI Lösung von mirage auch nicht angebracht.

mirage228 26. Dez 2004 10:56

Re: prüfen, ob es ein Ordner ist
 
Zitat:

Zitat von Daniel
Zitat:

Zitat von Luckie
Warum nicht die entsprechende Funktion aus der Unit FileCtrl nehmen?

...weil es die da zum Beispiel in Delphi 2005 nicht (mehr) gibt? Ich hatte auch nach etwas in der Richtung gesucht, aber nichts mehr gefunden.

Äh, im Win32 Teil gibt es Unit noch auf jeden Fall ;). Für .NET gibt es die Directory Klasse(n) :)

Edit:
Nochmal für .NET
Delphi-Quellcode:
System.IO.Directory.Exists()
mfG
mirage228

Matze 26. Dez 2004 10:57

Re: prüfen, ob es ein Ordner ist
 
Zitat:

Zitat von Daniel
Es geht aber auch anders: Wenn Du absolut sicher bist, dass es entweder Dateien oder Verzeichnisse sind, dann prüfe mit Delphi-Referenz durchsuchenDirectoryExists(), ob ein Eintrag ein Verzeichnis ist. Wenn nein, dann muss es ja eine Datei sein.

Wenn ich aber in einem Ordner eine Datei und einen Ordner mit gleichem Dateinamen habe, kann's da auch zu Problemchen kommen.

Daniel 26. Dez 2004 10:59

Re: prüfen, ob es ein Ordner ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Gibt es bestimmt.

Du kleiner Widerporst. :mrgreen: Ich hatte die Datei eben vor der Nase. Screenie im Anhang.


Vielleicht ist es aber auch einfach nur zu früh für mich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.
Seite 1 von 3  1 23      

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