Prüfen ob Datei existiert?



  • 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.



  • Jochen Kalmbach schrieb:

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

    Zu dem Objekt führt ein Pfad (oder mehrere - Hardlinks etc.)
    Dieser Pfad enthält selbstverständlich auch den Dateinamen.

    Die Doku ist IMO unklar und vielleicht irreführend, aber nicht wirklich falsch. Ändern sollten sie die Beschreibung wahrscheinlich trotzdem.



  • Also bei NtfsDisableLastAccessUpdate=0 wird auch unter Vista der Zeitstempel für die letzte Änderung beim Öffnen einer Datei sofort aktualisiert.



  • Die meisten Anwender/Programmierer/Programme dürfte es doch wohl kaum jucken, wann jemand zuletzt ne Datei geöffnet hat?

    Davon mal abgesehen ist für diesen Zweck GetFileAttributes wohl doch am besten, ne.

    MfG,
    E.



  • Blaze schrieb:

    Noch schneller geht das über "Datei-Attribute":

    BOOL FileExists(const std::string & StrFilename)
    {
    	//Schneller: nur Dateiinformationen lesen
    	return( (GetFileAttributes(StrFilename.c_str()) == INVALID_FILE_ATTRIBUTES)
    			? FALSE  //lesen nicht möglich -> Datei existiert nicht!
    			: TRUE); //die Datei existiert
    }
    

    Aber mal im Ernst, auf Probeöffnen müsstest du doch mindestens gekommen sein 😉

    ich hab das von blaze in meinem code übernommen und bin damit sehr zufriden ...die 4000 dateien checkt er in knapp 3 sec durch und gut is

    lg karma


Anmelden zum Antworten