File-Informationen aus HANDLE
-
Hallo Leute.
Ihr könnt mir sicher helfen.
Und zwar verlangt CopyFileEx() optional eine Routine in folgender Form:DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData);
Soweit so gut. Routine implementiert etc.
Nun meine Frage: es geht um die Parameter
HANDLE hSourceFile, HANDLE hDestinationFile
Wie kann ich die Datei-Informationen (Name etc.) aus den HANDLEs auslesen, kann man die HANDLEs auf CFile-Objekte casten oder wie läuft das? Die MSDN bietet hierzu leider keinen Hinweis oder ich bin zu blöd zu suchen (was wohl eher sein wird
).
Vielen Dank schonmal für eure Hilfe.
MfG, Matze
-
Du kannst ein CFile mit einem Handle erstellen:
HANDLE hFile; ... CFile myFile( hFile );
-
Danke erstmal für's Antworten.
Der Compiler bringt mir bei dieser Variante folgenden Fehler:
cannot convert parameter 1 from 'void *' to 'int'
Ein Cast nach int bringt auch nichts, dann gilt die Datei als nicht existent.
In der MSDN steht, bei CFile(int hFile) muss die Datei bereits geöffnet sein. Ich denke aber nicht, dass sie bei reiner Übergabe als Parameter schon geöffnet ist. Kann ich die Datei nur mit dem HANDLE öffnen? Dann geht es vielleicht oder was denkst du?
-
Zeig mal Deinen Code
-
Also bei dem Code kommt der Compiler-Fehler:
DWORD CALLBACK CopyProgressRoutine( LARGE_INTEGER TotalFileSize, // file size LARGE_INTEGER TotalBytesTransferred, // bytes transferred LARGE_INTEGER StreamSize, // bytes in stream LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream DWORD dwStreamNumber, // current stream DWORD dwCallbackReason, // callback reason HANDLE hSourceFile, // handle to source file HANDLE hDestinationFile, // handle to destination file LPVOID lpData // from CopyFileEx ) { CFile cFile(hSourceFile); // hier kommt der Fehler AfxMessageBox(cFile.GetFilePath()); return PROGRESS_CONTINUE; }
Mehr gibt's nicht zu sehen
-
und der Fehler soll in der Zeile sein, wo Du CFile benutzt ?
-
Wo ich den Konstruktor von CFile aufrufe, ja.
Nochmal die komplette Fehlermeldung:error C2664: '__thiscall CFile::CFile(int)' : cannot convert parameter 1 from 'void *' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Und nochmals sei gesagt, dass ein Cast nach int zwar funktioniert, dann der Dateiname aus dem CFile aber leer ist.
-
von dem handle kann man nicht mehr zum dateinamen kommen.
-
-
Airdamn schrieb:
...... schrieb:
von dem handle kann man nicht mehr zum dateinamen kommen.
nu glar, guckst Du hier
da steht was von file mappings.
-
ok scheint doch das richtige zu sein.
aber ich glaube nicht das der fragesteller das wirklich sucht/braucht.