使用zzip和minizip解压缩文件

摘要:
=NULL){delete[](p);(p)=NULL;};voidUnzipAndZip(constchar*pScrFileName,constchar*pDstFileName){structFILE_DESC{unsignedchar*pData;size_tDataSize;};std::map<std::string,FILE_ DESC>mapFileStreams;ZZIP_DIR*pZipDir=ZZIP_opendir(pScrFileName);ZZIP_方向*pZipDirent=空;while(pZipDirent=zzip_readdir(pZipDir)){size_tlength=strlen(pZipDirector->d_name);if(length>0){if(pZipDirect->d_name[length-1]!='\\'&&pZipDirent->d_name[length-1'!='/'){zzip_FILE*pZipFile=zzipfile_open!
#include <zzip/zzip.h>
#include
<zlib.h>
#include
<zip.h>
#include
<unzip.h>

#include
<string>
#include
<map>

#ifdef _DEBUG
#pragma comment( lib, "zlib_d.lib")
#pragma comment( lib, "zzip_d.lib")
#pragma comment( lib, "minizip_d.lib")
#else
#pragma comment( lib, "zlib.lib" )
#pragma comment( lib, "zzip.lib" )
#pragma comment( lib, "minizip.lib" )
#endif

#define SAFE_DELETEARRAY(p) if(p != NULL) { delete[] (p); (p) = NULL; };

void UnzipAndZip( const char* pScrFileName, const char* pDstFileName )
{
struct FILE_DESC
{
unsigned
char* pData;
size_t DataSize;
};

std::map
<std::string, FILE_DESC> mapFileStreams;

ZZIP_DIR
* pZipDir = zzip_opendir( pScrFileName );
ZZIP_DIRENT
* pZipDirent = NULL;
while( pZipDirent = zzip_readdir( pZipDir ) )
{
size_t length
= strlen(pZipDirent->d_name);
if( length > 0 )
{
if( pZipDirent->d_name[length - 1] != '\\' &&
pZipDirent
->d_name[length - 1] != '/' )
{
ZZIP_FILE
* pZipFile = zzip_file_open( pZipDir, pZipDirent->d_name, ZZIP_CASELESS );
if( pZipFile != NULL )
{
ZZIP_STAT sz;
memset(
&sz, 0, sizeof(sz) );
zzip_file_stat( pZipFile,
&sz );
if( sz.st_size > 0 )
{
unsigned
char* pBuffer = new unsigned char[sz.st_size];
zzip_file_read( pZipFile, pBuffer, sz.st_size );
FILE_DESC data
= { pBuffer, sz.st_size };
mapFileStreams[pZipDirent
->d_name] = data;
}
zzip_file_close( pZipFile );
}
}
}
}
if( pZipDir )
zzip_closedir( pZipDir );

zip_fileinfo ZipFileInfo;
zipFile ZipFile
= zipOpen( pDstFileName, 0 );

std::map
<std::string, FILE_DESC>::iterator iter =
mapFileStreams.begin();

while( iter != mapFileStreams.end() )
{
int err = zipOpenNewFileInZip( ZipFile, iter->first.c_str(),
&ZipFileInfo, NULL, 0, NULL, 0, NULL, 0, 0 );
zipWriteInFileInZip( ZipFile, iter
->second.pData, iter->second.DataSize );
SAFE_DELETEARRAY( iter
->second.pData );
++iter;
}
zipClose( ZipFile, NULL );
}

int main(int argc, char* argv[])
{
UnzipAndZip(
"test.zip", "dst.zip" );
return 0;
};

免责声明:文章转载自《使用zzip和minizip解压缩文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Amoeba(变形虫)logicaldoc的外部认证——AD集成下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

TCP流量控制和拥塞控制

第一个问题是收割台中的流量控制。TCP使用滑动窗口机制。第二个问题是报头中的拥塞控制。在具有不同网络速度的机器进行通信的环境中,拥有流量控制机制非常重要。...

C#探秘系列(十)WPF:打开文件选择器选择文件并保存

//此为点击按钮的监听事件,点击按钮弹出文件选择器privatevoidimageButton_Click(objectsender,RoutedEventArgse){vardialog=newOpenFileDialog();dialog.Filter=".jpg|*.jpg|.png|*.png|.jpeg|*.jpeg";if(dialog.Show...

微信支付服务商模式支付与普通微信支付的配置区别

chapter=7_7&index=5注:与普通微信支付相比,源代码是上述7/8之间的区别,其他可以看作是服务提供商自己的微信支付配置;...

USBWriter之后恢复磁盘大小

USBWriter之后恢复磁盘大小的方法:1,cmd2,diskpart3,listdisk4,selectdisk*5,clean6、在我的电脑点右键,管理,然后选磁盘管理,选择USB后,右键,然后再新建卷就可以了。...

四、使用ADB命令清除缓存

1、 ADBShell应用程序查看目录结构:adbshells查看系统当前日期:adbselldate查看系统CPU使用情况:adbsHELcat/proc/cpuinfo查看系统内存使用情况:adbshellcat/proc/meminfo显示所有应用程序:adbshelpmlistpackages显示系统自带的应用程序:adshellpmlistpack...

如何快速把ps序列图层建立帧动画?

工具ps1。将序列帧图片加载到ps新建-˃脚本-˃将文件加载到堆栈2中。创建序列帧动画窗口-˃时间线-˃时间线面板的右上菜单-˃从层3创建帧。移除多余的透明画布选择所有层-˃图像-˃剪辑-˃基于透明度4。将图层保存到图片文件-˃脚本-˃将图层保存为文件隐藏白色背景5。导出序列框架文件-˃自动-˃联系人表6存储为png...