Zugriffsverletzung bei CreateFile



  • hallo,

    wieso bekomme ich bei diesem Code eine Zugriffsverletzung???
    Die Datei existiert bereits.

    HANDLE hf = CreateFile("test.txt", GENERIC_READ, (DWORD)0, NULL, OPEN_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL+FILE_ATTRIBUTE_ARCHIVE, (HANDLE) NULL);
        FILETIME *ft;
        if(GetFileTime(hf, NULL, NULL, ft))
            Memo1->Lines->Add(IntToStr(ft));
    

    danke für jede hilfe



  • FILE_ATTRIBUTE_NORMAL+FILE_ATTRIBUTE_ARCHIVE

    ...except all other file attributes override FILE_ATTRIBUTE_NORMAL.

    (HANDLE) NULL stattdessen 0

    ggf. hole das Fileattribut mit

    DWORD att=GetFileAttributes(name);
    	if(att==0xFFFFFFFF)
    		att=FILE_ATTRIBUTE_NORMAL;
    

    Ansonsten hol dir mit GetLast Error den Fehler und schau in der Liste nach.



  • Memo1->Lines->Add(IntToStr(ft));

    Wozu dient diese Zeile??

    Vielleicht

    ileAge gibt den Zeitstempel des Betriebssystems von einer Datei zurück.

    Unit

    SysUtils

    Kategorie

    Dateiverwaltung

    extern PACKAGE int __fastcall FileAge(const AnsiString FileName);

    Beschreibung

    Mit FileAge können Sie den Betriebssystem-Zeitstempel der in FileName angegebenen Datei ermitteln. Der Rückgabewert kann anschließend mit der Funktion FileDateToDateTime in ein TDateTime-Objekt konvertiert werden. Ist die angegebene Datei nicht vorhanden, wird der Wert -1 zurückgegeben.



  • tuxman schrieb:

    wieso bekomme ich bei diesem Code eine Zugriffsverletzung?

    In welcher Zeile?



  • Warum überprüfst du nicht die Rückgabewerte?



  • Danke für die Hilfe,

    HANDLE hf = CreateFile("test.txt", GENERIC_READ, (DWORD)0, NULL, OPEN_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL+FILE_ATTRIBUTE_ARCHIVE, (HANDLE) NULL);
        FILETIME *ft;
         :arrow: if(GetFileTime(hf, NULL, NULL, ft)) // Hier bekomme ich die Zugriffsverletzung
            Memo1->Lines->Add(IntToStr(ft)); // Diese Zeile dient nur mir zur überprüfung
    

    Noch eine Frage: muss ich das Dateiattribut angeben, wenn die datei existiert?



  • Hallo

    Keiner der Parameter für GetFileTime darf NULL sein, auch wenn du nur einen brauchst. Also drei gültige Adressen übergeben.

    bis bald
    akari



  • BOOL GetFileTime(
    
        HANDLE hFile,	// identifies the file 
        LPFILETIME lpCreationTime,	// address of creation time 
        LPFILETIME lpLastAccessTime,	// address of last access time  
        LPFILETIME lpLastWriteTime 	// address of last write time 
       );
    

    LPFILETIME = Adresse

    muss ich das Dateiattribut angeben, wenn die datei existiert?

    Es steht nicht drin, dass das fehlen darf; im Windows SDK



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • akari schrieb:

    Keiner der Parameter für GetFileTime darf NULL sein, auch wenn du nur einen brauchst. Also drei gültige Adressen übergeben.

    Das ist nicht korrekt. lpCreationTime, lpLastAccessTime und lpLastWriteTime dürfen durchaus NULL sein, sofern diese nicht gebraucht werden.
    Das Problem ist vielmehr, dass ft ein nicht initialisierter Zeiger ist. Der Op wollte wohl eher sowas

    FILETIME ft;
        if(GetFileTime(hf, NULL, NULL, &ft))
    


  • danke. ich habe es jetzt hinbekommen. 🙂


Anmelden zum Antworten