Prüfen ob Datei existiert?
-
Ich hätte da auch noch einen:
if(PathFileExists(TEXT("testdatei.txt"))) { // Jawoll! }
-
Gästchen schrieb:
PathFileExists
Lt. meiner Doku testest dies *nur* den Pfad und nicht die Datei, oder?
-
Jochen Kalmbach schrieb:
Gästchen schrieb:
PathFileExists
Lt. meiner Doku testest dies *nur* den Pfad und nicht die Datei, oder?
Nein! Das ist irreführend in der Doku. Es wird wirklich das Objekt geprüft auf den dieser Pfad zeigt. Es wird dabei aber nicht zwischen Pfad oder Datei unterschieden.
BTW: Wenn Du das Sample Dir ansiehst ist es klar.
http://msdn.microsoft.com/en-us/library/bb773584(VS.85).aspx
Denn der Pfad in diesem Beispiel existiert offensichtlich für die erste Datei...
-
Martin Richter schrieb:
Nein! Das ist irreführend in der Doku.
Hast Du schon ein Doku-Bug ausgefüllt!?
-
Jochen Kalmbach schrieb:
Martin Richter schrieb:
Nein! Das ist irreführend in der Doku.
Hast Du schon ein Doku-Bug ausgefüllt!?
Nope!
-
Ich verstehe nicht so ganz, was hier irreführend ist:
MSDN schrieb:
Determines whether a path to a file system object such as a file or directory is valid.
Von welchem Doku-Bug redet Ihr?
-
Gästchen schrieb:
MSDN schrieb:
Determines whether a path ... is valid.
Von welchem Doku-Bug redet Ihr?
Von dem fetten....
Es wird sozusagen nru gepfürft, ob der Pfad zur Datei/Dir gültig ist... nicht aber ob die Datei selber gültig ist!
So lese es zumindest ich...
-
Sagen wir es mal so:
PathFileExists gibt !=0 zurück wenn es ein Objekt mit dem Pfad pszPath gibt. Egal ob Datei oder Pfad.Beispiel:
- Ein Pfad mit dem Namen C:\TEST existiert
- sowie eine Datei mit dem Namen C:\TEST\Test.txt
- Aber die Datei C:\TEST\Nixda.txt existiert nichtDann gilt:
ASSERT(::PathFileExists(_T("C:\\Test")); ASSERT(::PathFileExists(_T("C:\\Test\\Test.txt")); ASSERT(!::PathFileExists(_T("C:\\Test\\Nixda.txt"));
Das der Teilpfad C:\Test existiert ist für PathFileExists uninteressant.
-
Nur zur Info: Intern wird nichts anderes als "GetFileAttributes" aufgerufen!
Somit würde ich lieber direkt diese Funktion aufrufen!
-
Jochen Kalmbach schrieb:
Nur zur Info: Intern wird nichts anderes als "GetFileAttributes" aufgerufen!
Somit würde ich lieber direkt diese Funktion aufrufen!
Und warum? Ich nutze gerade diese light weight API sehr gerner.
Ich hatte niemals Probleme mit dem Namen der Funktion
Ich meinen Augen ist dasASSERT(PathFileExists(pszFilename));
sprechender als
ASSERT(GetFileAttributes(pszFilename)!=INVALID_FILE_ATTRIBUTES);
-
Martin Richter schrieb:
Und warum?
Weil es eben nicht unterscheidet, ob es sich dabei um ein Verzeichnis oder eine Datei handelt. Was i.d.R. nicht ganz unerheblich ist... aber das hängt natürlich vom Anwendungsfall ab.
-
Habe ich was nicht mitbekommen
Laut GetFileAttributes Doku:
If the function succeeds, the return value contains the attributes of the specified file or directory.
Aber es gibt doch noch andere schöne Funktionen:
PathIsDirctory PathIsExe PathIsRoot PathIsNetworkPath
-
Martin Richter schrieb:
Habe ich was nicht mitbekommen
Laut GetFileAttributes Doku:
If the function succeeds, the return value contains the attributes of the specified file or directory.
Aber es gibt doch noch andere schöne Funktionen:
PathIsDirctory PathIsExe PathIsRoot PathIsNetworkPath
richtig. und es gibt auch noch
fopen
-
Schonmal überlegt ob so eine Abfrage überhaupt Sinn macht?
-
richtig schrieb:
richtig. und es gibt auch noch
fopen
Dies ist aber ganz schlecht, da dadurch die Datei selbst verändert wird!
Ein "GetFileAttributes" verändert erstens die Datei nicht und zweitesy ist es doppelt so schnell als ein "PathFileExists" + "!PathIsDirctory"!
-
flasch schrieb:
Schonmal überlegt ob so eine Abfrage überhaupt Sinn macht?
welche so eine, wa.
bevor man ne datei überschreibselt, könnte sich eine abfrage lohnen, wa.
-
Jochen Kalmbach schrieb:
richtig schrieb:
richtig. und es gibt auch noch
fopen
Dies ist aber ganz schlecht, da dadurch die Datei selbst verändert wird!
Verändert?!
-
klatsch schrieb:
flasch schrieb:
Schonmal überlegt ob so eine Abfrage überhaupt Sinn macht?
bevor man ne datei überschreibselt, könnte sich eine abfrage lohnen, wa.
nö, wa
-
umpf! schrieb:
Verändert?!
Ja, die "Access-Time" wird geändert.
Das wird sie z.B. bei einem "dir" bzw. GetFileAttributes/FindFirstFile nicht... (oder täusche ich mich da?)
-
Jochen Kalmbach schrieb:
umpf! schrieb:
Verändert?!
Ja, die "Access-Time" wird geändert.
Das wird sie z.B. bei einem "dir" bzw. GetFileAttributes/FindFirstFile nicht... (oder täusche ich mich da?)
Also ein einfaches Öffnen (CreateFile) bzw. Lesen (ReadFile) ändert den Zeitstempel für den letzten Zugriff nicht.