Handle auf Datei
-
Hallo!
Ich hoffe, ich bin nicht im falschen Forum
Folgendes Problem:
Die FunktionTouchFileTimes(HANDLE FileHandle, PSYSTEMTIME pSystemTime)
erwartet ein Handle auf die Datei. Ich habe eine Datei, an der ich diese Funktion anwenden will. Wie kriege ich ein Handle darauf, was ist das überhaupt?
Ich habe versucht, die Datei mit CFile zu öffnen und die Adresse von CFile - Objekt als Handle zu übergeben. Der Compiler hat nicht gemeckert, aber das hat nichts gebracht
Ich hoffe, Ihr habt mich verstanden und habt eine Antwort für mich
Danke
-
Servus,
ich denke mal wenn du die Datei mit CStdioFile oder mit CFile öffnest bekommst du das Handle der Datei:
CStdioFile stdioFile; stdioFile.Open(_T("PetersDickeWutz.wfi"), CFile::modeRead, &eFile); stdioFile.m_hFile; //zack da ist dein handle*winke*
Hellsgore
-
Nein, geht leider nicht
Der Compiler kann nicht konvertieren von unsigned int in void*.
Wenn ich auf (HANDLE) kaste, kann er kompilieren, aber die Funktion liefert 0
zurück, d.h. nicht geklappt. Und GetLastError() liefert ERROR_INVALID_HANDLE.Hier ist mein Code:
CStdioFile file; if(file.Open("Datei.txt", CFile::modeRead)) { file.Close(); BOOL res = TouchFileTimes ((HANDLE)(file.m_hFile), NULL); DWORD err = GetLastError(); }P.S. Ich habe auch versucht, die Datei nach dem Aufruf von TouchFileTimes() zu schliessen, klappt auch nicht
-
CFile file; if(file.Open("Datei.txt", CFile::modeRead)) { file.Close(); BOOL res = TouchFileTimes ((HANDLE)file, NULL); DWORD err = GetLastError(); }Probier das ma.
-
Ne, so geht auch nicht:
BOOL res = TouchFileTimes ((HANDLE)file, NULL);so kann er CFile in void * nicht konvertieren, nur so:
BOOL res = TouchFileTimes ((HANDLE)&file, NULL);Aber die Funktion liefert trotzdem 0 zurück

-
Hast du schon CFile statt CStdioFile verwendet?
-
aber ja, ich habe alle möglichen Varianten ausprobiert. Immer Returnwert 0 und GetLastError() liefert 6 (ERROR_INVALID_HANDLE)
-
Ähm, was mir grad auffällt. Du machst ein file.Close vor TouchFileTimes. Das muss natürlich danach hin!
-
Ja, das habe ich als Erstes ausprobiert. Mit demselben Efolg. Dann dachte ich, dass wenn eine Datei geöffnet und nicht geschlossen ist, ist sie für alle anderen Zugriffe gesperrt (TouchFileTimes() ist doch ein Zugriff). Deshalb habe ich Close() davor gestellt.
Als nächster Versuch habe ich das Handle mit FindFirstFile(...) geholt, aber TouchFileTimes() hat immer noch 0 geliefert...
