📄 zstream.cpp
字号:
// Zstream.cpp: implementation of the CZstream class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Zstream.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CStructureStorage g_StgDoc;//复合文档
//打开复合文档
int open_StgDoc(LPCSTR fileName)
{
return g_StgDoc.Open(fileName,true);
}
//关闭复合文档
int close_StgDoc()
{
return g_StgDoc.Close();
}
/////////////////////////////////////////
//write_stream:
//功能:写入压缩流
//参数:
// LPCSTR sName 流的名字,根据写入顺序自动编号0,1....,
// 由配置文件记录真实文件名
// void *pBuffer 数据流的起始地址;
// int iSize 压缩前的数据流大小
//返回值: 压缩成功返回1,否则0;
//////////////////////////////////////////
int write_stream(LPCSTR sName,void *pBuffer,int iSize)
{
USES_CONVERSION;
CComPtr<IStream> spStm;
spStm = g_StgDoc.OpenStream(sName,true);
if(spStm==NULL)return 0;
// test zlib sequential stream implementation
DWORD cb=0;
ZWriteStream zw;
zw.Initialize(spStm);
HRESULT hr =zw.Write(pBuffer, iSize, &cb);
if(hr!=S_OK)return 0;
zw.Cleanup();
spStm.Release();// Release stream
return 1;
}
/////////////////////////////////////////
//read_stream:
//功能:解压缩流
//参数:
// LPCSTR sName 流的名字,根据写入顺序自动编号0,1....,
// 由配置文件记录真实文件名
// void *pBuffer 数据流的起始地址;
//返回值: int iSize 解压缩后的数据流大小;
/////////////////////////////////////////////////
CComPtr<IStream> read_stream(LPCSTR sName, DWORD iSize)
{
USES_CONVERSION;
CComPtr<IStream> spStm,pStream;
spStm = g_StgDoc.OpenStream(sName);
if(spStm==NULL)return NULL;
pStream = g_StgDoc.OpenStream("output",true);//创建输出流
ZReadStream zr;
zr.Initialize(spStm);
HRESULT hr= zr.Read(pStream,iSize*2);
zr.Cleanup();
spStm.Release();// Release stream
pStream.Release();
pStream = g_StgDoc.OpenStream("output");//创建输出流
ATLASSERT(pStream != NULL);
return pStream;
}
int stream2file(LPCSTR sName,LPCSTR fName,int iSize)
{
USES_CONVERSION;
CComPtr<IStream> spStm,pStream;
spStm = g_StgDoc.OpenStream(sName);
if(spStm==NULL)return NULL;
pStream = g_StgDoc.OpenStream("output",true);//创建输出流
ZReadStream zr;
zr.Initialize(spStm);
HRESULT hr= zr.Read(pStream,iSize*2);
zr.Cleanup();
spStm.Release();// Release stream
pStream.Release();
pStream = g_StgDoc.OpenStream("output");//打开输出流
ATLASSERT(pStream != NULL);
ULONG uSize=iSize+12;
byte * lpBuf;
lpBuf=(byte *)malloc(uSize);
ULONG pcbRead=0;
int rst=pStream->Read(lpBuf,uSize,&pcbRead);
CFile f;
f.Open(fName,CFile::modeWrite|CFile::modeCreate,NULL);
f.Write(lpBuf,pcbRead);
f.Close();
free(lpBuf);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -