zoukankan      html  css  js  c++  java
  • 使用zzip和minizip解压缩文件

    #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;
    };
  • 相关阅读:
    厚积薄发IT咨询
    厚积薄发SQL技巧
    厚积薄发CSS
    厚积薄发数据库迁移
    厚积薄发系统安全日志已满处理

    厚积薄发SQLServer内核架构浅析
    厚积薄发css布局页面头部
    常用正则表达式
    一条SQL语句OA
  • 原文地址:https://www.cnblogs.com/LinuxHunter/p/2022342.html
Copyright © 2011-2022 走看看