HANDLE of an open file



  • schönen guten Morgen...

    Mein Problem:
    mit
    CStdioFile filei;
    filei.Open(TEXT("path+filename"), _ CFile::modeReadWrite|CFile::shareExclusive|CFile::typeBinary, &fileException))
    habe ich eine Datei geöffnet

    jetzt kommt code
    ...
    ...

    jetzt möchte ich den HANDEL der oben geöffneten Datei ->
    um diesen einer Funktion zu übergeben.

    Wie erhalte ich den HANDLE?

    Für Antworten danke ich schon mal im voraus.
    Rolf



  • Compiler, OS ?



  • Was willst du denn mit diesem HANLDE machen, was nicht direkt mit deinem File geht?

    *nachsieht* laut MSDN hast du dein File-Handle in dem Member m_pStream.



  • Den HANDLE möchte ich einer Funktion übergeben in der

    WriteFile( hFile,... )

    verwenden wird.

    XP, VS6.0

    -->
    mit
    HANDLE hFile = fileo.m_pStream;
    WriteFile( hFile,... ) //nicht erfolgreich!
    DWORD dwGLError = GetLastError();
    erhalte ich:
    The handle is invalid. ?



  • Rolf_VIII schrieb:

    Den HANDLE möchte ich einer Funktion übergeben in der

    WriteFile( hFile,... )
    ....

    Mal ein Tipp: Ist das Handle evtl. nicht (standard-)kopierbar ?
    Wenn WriteFile() statt einer Kopie eine Referenz übernähme, könnte es vllt. gehen.

    Gruß,

    Simon2.



  • vielleicht verstehe ich ja was falsch, aber
    ich dachte ein Handle ist keine Kopie sondern ein Zeiger auf das Original.
    Und diesen Zeiger hätte ich der Funktion übergeben, damit sie weiss in welche Datei sie etwas schreiben muss...

    Rolf



  • Muß es denn unbedingt WriteFile() sein? CFile (und damit auch CStdioFile) hat doch seine eigene Write()-Methode für so etwas.

    Eidt: Und ein Handle ist nicht unbedingt ein Zeiger. Das ist mehr eine Art Marker, mit der die Systemfunktionen ihre Objekte wiedererkennen können (was genau dahintersteht, weiß nur das Programm).



  • nein, natürlich muss es nicht unbedingt WriteFile sein.
    Allerdings kenn ich die von Dir erwähnten Funktionen nicht.
    Muss mich also erst einlesen...



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • m_pStream ist ein FILE*, da wird denke ich niemals ein HANDLE drinnen stehen.
    Bei CFile ist in m_hFile in normales Win32 HANDLE zu finden, ob das bei CStdioFile auch noch so ist weiss ich nicht, einfach im Source nachgucken macht in dem Fall schlau.

    Bei MFC 4-6 musst du das m_hFile noch auf HANDLE casten, ab MFC 7 oder 8 isses dann von Haus aus ein HANDLE.

    Aber achtung: CFile ist eine abstrakte Basisklasse. Hat zwar eine default Implementierung die mit normalen KERNEL32 Files arbeitet, aber Klassen wie z.B. CMemFile tun das nicht und haben daher auch niemals ein HANDLE oder sonstwas in der Art in m_hFile stehen. Wer also hergeht und irgendwo m_hFile ausliest und damit arbeitet verbaut sich damit auch automatisch die Möglichkeit dass die Funktion/das Modul wo er das so macht mit CMemFile oder CHttpFile oder was ähnlichem verwendet werden kann.



  • jep, das wars...

    Danke Plotzenhotz damit hats funktioniert. Und da ich im Moment mal davon ausgehe, dass ich "CMemFile oder CHttpFile oder .." nicht brauche, ist das ja egal.

    Danke auch den anderen.
    Mit der Variante von CFile hats auch funktioniert.

    Rolf


Anmelden zum Antworten