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üfungNoch 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 sowasFILETIME ft; if(GetFileTime(hf, NULL, NULL, &ft))
-
danke. ich habe es jetzt hinbekommen.
