• 使用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;
    };
  • 相关阅读:
    测试平台系列(93) 免费的gitee当oss真的香吗
    C/C++ 结构体内存分布
    c# 委托与事件学习
    unity随记
    unity 对于对象刚体不断抖动的处理
    uniapp .keystore文件生成后不可食用的解决方案
    照片尺寸
    Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.
    ConstraintLayout
    Navigation库支持的参数类型
  • 原文地址:https://www.cnblogs.com/LinuxHunter/p/2022342.html
Copyright © 2020-2023  润新知