哪位可以教授一下cmemfile的用法(中文:))Cmemfile.write(buf,bufsize);
到底他写到cmemfile的哪里去了?难道只能通过read()慢慢地读吗?

解决方案 »

  1.   

    以前做过一个派生类,参考一下:
    时间很久了,也不知道是不是有什么错误,仅供参考#pragma once
    // CMemArchive 命令目标
    class CMemArchive : public CMemFile
    {
    public:
    CMemArchive();
    virtual ~CMemArchive();
    public:
    void SaveToDisk(CString diskFileName);//把当前内存文件保存到磁盘
    void ExtractFromDisk(CString diskFileName);//从磁盘中解压文件到内存文件
    void SaveToFile(CFile diskFile1);//把当前内存文件的内容写入磁盘文件的当前位置
    void EncodeMem(CMemFile *m_pOutMemFile);//压缩当前内存文件,输出压缩的内存文件
    void DecodeMem(CMemFile *m_pOutMemFile);//解压缩当前内存文件,输出解压缩的内存文件

    };
    CPP文件:
    // MemArchive.cpp : 实现文件
    //#include "stdafx.h"
    #include "PDAEdit30.h"
    #include "MemArchive.h"
    #include "lh5.h"//注意不要使用filename,因为这个已经在lh5类中定义
    // CMemArchiveCMemArchive::CMemArchive(){
    //CLH5 lh5;
    }CMemArchive::~CMemArchive()
    {

    SetLength(0);
    }
    //把压缩当前内存文件并保存到磁盘void CMemArchive::SaveToDisk(CString diskFileName)
    {
    int nLen=GetLength();
    BYTE *lpBuffer=new BYTE[nLen];
    SeekToBegin();
    Read(lpBuffer,nLen);
    CLH5 lh5;
    lh5.SetInMemFlag(true);

    lh5.EncodeMemFileToDiskFile(this,"xgh2.xgh"); delete[] lpBuffer;

    //lh5.EncodeFile();
    //lh5.DecodeFile();
    /*CFile file;
    CFileException e;
    file.Open( diskFileName, CFile::modeCreate | CFile::modeWrite, &e );
    file.Write(lpBuffer,nLen);
    file.Close();*/

    //return 0;
    }
    void CMemArchive::ExtractFromDisk(CString diskFileName)//从磁盘中解压文件到内存文件
    {
    CString szFilters="xgh (*.xgh)|*.xgh|全部文件 (*.*)|*.*|";
    CFileDialog m_filedlg(TRUE,0, 0,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters);
    CString path,name;
    //FILE *file;
    if ( m_filedlg.DoModal ()==IDOK )
    {
    path=m_filedlg.GetPathName();
        CLH5 lh5;
    lh5.SetOutMemFlag(true);
        lh5.DecodeDiskFileToMemFile(this,path);
    }}
    //把当前内存文件的内容写入磁盘文件的最后位置,并且结束当前内存文件
    void CMemArchive::SaveToFile(CFile diskFile1)
    {
    diskFile1.SeekToEnd();//写入最后
    DWORD len=this->GetLength();
    diskFile1.Write(&len,sizeof(DWORD));//先写入后续块的长度
    diskFile1.Write(this->Detach(),len);
    }
    //压缩当前内存文件,输出压缩的内存文件
    void CMemArchive::EncodeMem(CMemFile *m_pOutMemFile)
    {
    CLH5 lh5;
    lh5.SetInOutMemFlag(true);
    lh5.EncodeMemToMem(this,m_pOutMemFile);
    }
    //解压缩当前内存文件,输出解压缩的内存文件void  CMemArchive::DecodeMem(CMemFile *m_pOutMemFile)
    {
    CLH5 lh5;
    lh5.SetInOutMemFlag(true);
    lh5.DecodeMemToMem(this,m_pOutMemFile);
    }