CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Apr 1999
    Posts
    23

    CArchive question



    Hi there,

    i have the followin portion of code which works fine for me,

    but there is 1 question left.

    first let´s look at the code

    CView::AnyFunction

    {

    CFile file;

    CFileException fe;

    file.Open(m_strFileName, CFile::modeCreate|CFile::modeWrite, &fe);

    CArchive ar(&file, CArchive::store);

    ar.m_pDocument = GetDocument();

    SerializeRaw(ar);

    }

    As i noticed, the code works, the file in my edit ctrl is stored.

    The question is: Do I have to have a call to file.Close() and if yes where?

    I tried to Clode the handle after 'SerializeRaw(ar)' but this cuases a crash

    because the Write - File function seems to be called later.

    Can anybody tell me a couple of things on this?!?


    thanks very much






  2. #2
    Join Date
    Apr 1999
    Posts
    383

    Re: CArchive question



    You don't have to close the file, because the CFile destructor will do that for you when the file goes out of scope.


    Closing it in your function didn't work because -


    The CArchive docs say:


    "You may not use CFile operations to alter the state of the file until you have closed the archive. Any such operation will damage the integrity of the archive."


    "CArchive::Close() flushes any data remaining in the buffer, closes the archive, and disconnects the archive from the file. No further operations on the archive are permitted. After you close an archive, you can create another archive for the same file or you can close the file."


    "The member function Close ensures that all data is transferred from the archive to the file, and it makes the archive unavailable. To complete the transfer from the file to the storage medium, you must first use CFile::Close and then destroy the CFile object."


    The CArchive::Close function will be called from the CArchive destructor, which is run when CArchive goes out of scope - at the end of your function, unless you call it explicitly before then.


    Hope that helps,


    Dave



  3. #3
    Guest

    Re: CArchive question

    You have to ar.Close(); and file.Close(); right after SerializeRaw(ar);.


  4. #4
    Join Date
    Jun 2000
    Posts
    34

    Re: CArchive question

    The best way to do this is:
    UpdateData(TRUE);// Move the what is in edit ctrl to m_pDocument
    CFile file;
    file.Open(m_strFileName,CFile::modeCreate|CFile::modeWrite);
    CArchive ar(&file,CArchive::store);
    ar<< m_pDocument; // m_pDocument attached to edit ctrl
    ar.Close();
    file.Close();

    This will save what you have in the edit ctrl to a file.



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured