Datei öffnen nach file.Close()



  • Hallo!
    In einer Server-Client-Anwendung versende ich Dateien aller Art. Mit CFile.Write(..) schreibe ich die Daten in eine Datei und schließe sie dann mit file.Close(). Dann verlasse ich die Funktion, in der das CFile-Objekt lokal erzeugt wurde, so dass sein Destruktor ja wohl auch aufgerufen wird. Wenn ich die gespeicherte Datei dann im Explorer doppelklicke, bekomme ich die Meldung, dass sie gerade von einem anderen Prozess verwendet wird. Schließe ich meine Anwendung, kann ich die Datei problemlos öffnen. Ich möchte sie aber auch ohne Schließen meines Programmes öffnen können. Mit file.Close() müßte ich die Datei doch "entlassen", oder?



  • Ist das CFile-Objekt lokal oder global? Bei globalen kann es durch das Caching von Festplattenoperationen Probleme geben



  • Das CFile-Objekt ist lokal. Hier der Code:

    void CFiletransferDlg::OnReceive()
    {
       int fileLength,fileNameLength;;
       m_connectSocket.Receive(&fileLength,4);//Länge der Datei
    
       m_connectSocket.Receive(&fileNameLength,4);//Länge des Dateinames
       char* fileNameBuffer=new char[fileNameLength+1];
       m_connectSocket.Receive(fileNameBuffer,fileNameLength);
       fileNameBuffer[fileNameLength]=NULL;
    
       CString fileName("C:\\");
       fileName+=fileNameBuffer;
       CFile file(LPCSTR(fileName),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
    
       int dwRead;
       byte* data=new byte[4096];
       do{
          dwRead=m_connectSocket.Receive(data,4096);
          file.Write(data,dwRead);
       }
       while(dwRead>0);
    
       file.Close();
    }
    

    [ Dieser Beitrag wurde am 07.10.2002 um 11:04 Uhr von Unix-Tom editiert. ]



  • Code-Tags funktionierten nicht.

    [code type="C++"]
    void CFiletransferDlg::OnReceive()
    {
    int fileLength,fileNameLength;;
    m_connectSocket.Receive(&fileLength,4);//Länge der Datei

    m_connectSocket.Receive(&fileNameLength,4);//Länge des Dateinames
    char* fileNameBuffer=new char[fileNameLength+1];
    m_connectSocket.Receive(fileNameBuffer,fileNameLength);
    fileNameBuffer[fileNameLength]=NULL;

    CString fileName("C:\");
    fileName+=fileNameBuffer;
    CFile file(LPCSTR(fileName),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

    int dwRead;
    byte* data=new byte[4096];
    do{
    dwRead=m_connectSocket.Receive(data,4096);
    file.Write(data,dwRead);
    }
    while(dwRead>0);

    file.Close();
    }

    [\code]



  • Was mache ich bei den Tags falsch?


Anmelden zum Antworten