Prüfen ob Datei existiert?


  • Mod

    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 nicht

    Dann 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!
    😉


  • Mod

    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 das

    ASSERT(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.


  • Mod

    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.



  • Du musst ein wenig warten, bis sich diese Änderungen zeigen 😉 NTFS hat hier ein "gewissen" Delay! Starte mal den Rechner neu, dann siehst Du die Änderung.

    PS: Das wäre ja fürchterlich, wenn sich ein Öffnen nicht auswirken würde. Dann wäre ja der Zeitstempel total sinnlos.



  • Jochen Kalmbach schrieb:

    Gästchen schrieb:

    MSDN schrieb:

    Determines whether a path ... is valid.

    Von welchem Doku-Bug redet Ihr?

    Von dem fetten....

    Die Erklärung, was mit "path to a file system object" gemeint ist, folgt dem doch (a file or a directory). Man muss die Erklärung nur Lesen und nicht mitten im Satz aufhören. 😉



  • Ist Ansichtssache... ich lese trotzdem immer nur von einem *Pfad* und nicht davon, dass nach dem ganzen Objekt gesucht wird!



  • Jochen Kalmbach schrieb:

    Du musst ein wenig warten, bis sich diese Änderungen zeigen 😉 NTFS hat hier ein "gewissen" Delay! Starte mal den Rechner neu, dann siehst Du die Änderung.

    PS: Das wäre ja fürchterlich, wenn sich ein Öffnen nicht auswirken würde. Dann wäre ja der Zeitstempel total sinnlos.

    Oder Du hast Vista 😉
    Siehe:
    http://computer-forensik.org/2007/11/19/ntfs-lastaccessupdate-unter-vista/



  • Das wäre eine Erklärung. In 10min ist die Stunde abgelaufen, dann wissen wir mehr. 😉



  • Du hast aber *kein* Vista bzw. das Feature ist bei Dir auch aktiviert? (Standard bis Vista).



  • Vista und deaktiviert. Hab's jetzt mal aktiviert, Test muss aber bis morgen früh warten.


Anmelden zum Antworten