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.



  • ...... schrieb:

    von dem handle kann man nicht mehr zum dateinamen kommen.

    nu glar, guckst Du hier



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


Anmelden zum Antworten