• 使用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;
    };
  • 相关阅读:
    今日成长笔记2016-11-18
    牛人博客
    c 、c++、java区别
    Java开发中的23种设计模式详解
    JAVA编程规范
    设计及编码质量改进之降低耦合度
    加密
    敏捷开发之Scrum扫盲篇
    RPC
    李洪强iOS开发Swift篇—04_运算符
  • 原文地址:https://www.cnblogs.com/LinuxHunter/p/2022342.html
Copyright © 2020-2023  润新知