哪位可以教授一下cmemfile的用法(中文:))Cmemfile.write(buf,bufsize);
到底他写到cmemfile的哪里去了?难道只能通过read()慢慢地读吗?
到底他写到cmemfile的哪里去了?难道只能通过read()慢慢地读吗?
解决方案 »
- 为什么求助!CListCtrl列表框中的项第一次显示不出来,第二次以后就正常了呢?
- VC在XP下写好的用ADO远程访问SQLServer数据库的程序在Win7下不能用
- 【紧急求助】200分。在win98中,鼠标弹出菜单过长时为什么不能显示?
- 100000分 送给你!!!你要不要?
- 怎么将UNICODE转为其他码
- 请教怎样用编程的方式获得已知CLSID的COM类支持那些接口?
- 关于CRichEditCtrl的几个问题,高分(200)
- 请教高手,用vc写组件来调用Excel自动化对象时,如何合并单元格?
- 求助:包含iphlpapi.h后编译出现很多错误啊!!
- 编译过程找不到标准函数?
- 关于cstring的类型转换后的长度问题
- C runtime函数库中的函数扮演什么角色
时间很久了,也不知道是不是有什么错误,仅供参考#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);
}