![]() |
Delphi-Version: 2010
Gibts Alternativen zu File-/DirectoryExists?
Hallo zusammen,
ich möchte eine Funktion/Klasse/Irgendwas (eine Art Generallösung )entwickeln, mit denen man prüfen kann, ob eine Datei, ein Pfad, ein Laufwerk existiert und habe noch keine Idee wie. Kenne dazu bisher auch nur die oben genannten Funktionen. Gibt es da weitere? Auch wäre schön, wenn Berechtigungsfehler erkannt werden. Wenn eine Datei mit Pfad usw. übergeben wird, soll geprüft werden können, ob die Datei existiert. Aber auch, falls nicht, ob denn wenigsten der Pfad schon existiert oder das Laufwerk (gemappt ist). DirectoryExists liefert False wenn es eine Datei übergeben bekommt. Könnte man natürlich ExtractFilepath vorschalten. Es kann aber auch mal nur der Pfad geprüft werden. Dann verkürzt mir das ExtractFilePath den Pfad und verfälscht so ggf. das Ergebnis. Wenn denn Pfad/Datei existieren, sollen auch die Rechte abgeklopft werden. Vor allem, darf das Programm bzw. wahrsch. der eingeloggte User in dem Pfad schreiben/löschen... ------- Hintergrund ist halt, das bestimmte Verarbeitungen (beim Start) prüfen können sollen, ob Sie ihre Aufgabe erfüllen können und falls nicht gar nicht erst richtig starten. Hier halt: "Sind die Verzeichnisse die ich brauche verfügbar". (Ein anderer Zweig dieser Checker-Klasse( -oder Funktion?), wenn man so will könnte auf die Verfügbarkeit oder die Version anderer Programme prüfen, z.B. ist Excel vorhanden, wenn ich später mit Ole darauf zugreifen will, oder welches OS,...). Hoffe die Richtung in die die Frage geht ist ein bißchen klar geworden. Da ich selbst noch nicht zu 100% weiß wie das aussehen soll entschuldige ich mich für die schwammigkeit. Es geht mir halt auch um Ideen oder Anregungen. |
AW: Gibts Alternativen zu File-/DirectoryExists?
Versuch im verzeichnis eine Datei mit schreibrechten zu öffne bzw. die Datei mit schreibrechten zu öffnen.
Anschließend holst du dir mittels GetlastError den Fehlergrund falls nicht klappt. |
AW: Gibts Alternativen zu File-/DirectoryExists?
Die Alternative baut man sich selber (die Fingerübung zum Feierabend)
Delphi-Quellcode:
type
TFileDirExistsRet = ( fdeNo, fdeFile, fdeDir ); function FileDirExists( const FileOrDir : string ) : TFileDirExistsRet; begin if DirectoryExists( FileOrDir ) then Result := fdeDir else if FileExists( FileOrDir ) then Result := fdeFile else Result := fdeNo; end; |
AW: Gibts Alternativen zu File-/DirectoryExists?
Da als Delphi Version 2010 angegeben ist: zieh dir mal die IOUtils.pas rein
Alternativ die JclFileUtils.pas aus der JCL. |
AW: Gibts Alternativen zu File-/DirectoryExists?
und noch 'ne Fingerüberung nach dem Feierabend
Delphi-Quellcode:
type
TFileDirExistsRet = (fdeNo, fdeFile, fdeDir); function FileDirExists(const FileOrDir: String): TFileDirExistsRet; var FindFileData: TWIN32FindData; begin FindFileData.dwFileAttributes := INVALID_FILE_ATTRIBUTES; Windows.FindClose(FindFirstFile(PChar(FileOrDir), FindFileData)); if FindFileData.dwFileAttributes = INVALID_FILE_ATTRIBUTES then Result := fdeNo else if FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then Result := fdeFile else Result := fdeDir; end; // oder function FileDirExists(const FileOrDir: String): Boolean; var FindFileData: TWIN32FindData; begin FindFileData.dwFileAttributes := INVALID_FILE_ATTRIBUTES; Windows.FindClose(FindFirstFile(PChar(FileOrDir), FindFileData)); Result := FindFileData.dwFileAttributes = INVALID_FILE_ATTRIBUTES; end; |
AW: Gibts Alternativen zu File-/DirectoryExists?
@himitsu
Nur meinen Code kann man auf Anhieb begreifen :stupid: |
AW: Gibts Alternativen zu File-/DirectoryExists?
Zumindest die kurze Variante geht noch kürzer (Ok, hab' geschaut woher die SysUtils Funktionen die Infos holen):
Delphi-Quellcode:
Result kann man natürlich noch auswerten für eine differenzierte Rückgabe, aber dann ist es auch nicht mehr kürzer.
function FileDirExists(s: String): Boolean;
begin Result := GetFileAttributes(PChar(s)) <> $FFFFFFFF; end; |
AW: Gibts Alternativen zu File-/DirectoryExists?
Hallo und vielen Dank. Im nächste frag ich immer kurz vor Feierabend, wenn eure Finger dann so locker sitzen:-D.
Zum Problem: Die Funktion braucht ja mehr als nur eine Boolche Rückgabe, deswegen ist die Anregung mit dem Record oder ist das eine Enumeration
Delphi-Quellcode:
schonmal die wertvollste. Natürlich auch die Umsetzungsvorschläge.
type
TFileDirExistsRet = ( fdeNo, fdeFile, fdeDir ); Konkret muss ich mir dazu noch klar werden, was ich genau will. Ich denke da an sowas, wo mehrere Rückgabewerte möglich sind, z.B. wenn Filexists dann ja auch DirectoryExists. Im ObjectInspector gibts ja so Dinge. Heißen die dann Sets? Wenn ich dann so Fragen würde:
Delphi-Quellcode:
Das ist doch auch das, wo man die Dinge mit AND und OR verknüpft. War doch vor kurzem auch so ein Thread dazu. Such ich gleich mal.
if fdeFile in FileDirExists(MeinPfadoderDatei)
|
AW: Gibts Alternativen zu File-/DirectoryExists?
Delphi-Quellcode:
Enum = enthält mehrere Werte, aber jeweils immer nur Einen gleichzeitig
type
TEnum = ( x, y, z ); TSet1 = TEnum; TSet2 = set of ( x, y, z ); TRecord = record a: Integer; b: String; end; Set = kann mehrere Werte gleichzeitig aufnehmen (oder Keinen) Record = mehrere Variablen in einem Ein Boolean ist quasi ebenfalls ein Enumerator, mit zwei Werten.
Delphi-Quellcode:
type Boolean = (False, True);
mit SET
Delphi-Quellcode:
.
if fdeFile in FileDirExists(MeinPfadoderDatei) then
Delphi-Quellcode:
.
if FileDirExists(MeinPfadoderDatei) = [fdeFile] then
Delphi-Quellcode:
.
if FileDirExists(MeinPfadoderDatei) = [fdeFile, fdeDir] then
und ENUM
Delphi-Quellcode:
.
if FileDirExists(MeinPfadoderDatei) = fdeFile then
|
AW: Gibts Alternativen zu File-/DirectoryExists?
Danke himitsu für die Zusammenfassung, dann ist das glaub ich "set" was ich meinte und benutzen werde.
Was ist dann aber das mit dem AND und OR, wo man den Elementen die Werte 1,2,4,8,16 usw. gibt, so dass man mit binärer Logik da arbeiten kann? Ist das eine spezielle Form des Sets? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr. |
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