2014年11月2日 星期日

使用zlib解壓縮檔案 ( Decompression with zlib )

這裡的流程分為兩個部分:
  • 開啟壓縮檔,分析檔案內容 ( gz_io )
  • 針對壓縮內容產出對應檔案 ( writeZipFile )
#如果要壓縮檔有密碼時,請使用MiniZip去做解壓縮。



#include "zlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <fstream>

using namespace std;

std::string gz_io( const char * fname )
{
    gzFile file;
    z_off_t pos;
    file = gzopen( fname, "rb" );
    if ( file == NULL ) {
        std::cout<<"File open error"<<std::endl;
        return "";
    }

    char bufFileName[128] = {0};
    gzgets( file, bufFileName, sizeof(bufFileName) );
    std::cout<<bufFileName<<std::endl;

    std::string zipContent;
    char buf[2] = {0};
    int line = 1;
    pos = gzseek( file, 440, SEEK_SET );
    while( gzgets(file, buf, sizeof(buf)) != Z_NULL ){
        zipContent.append(buf);
        line++;
    }
    std::cout<<zipContent<<std::endl;
    gzclose(file);
    return zipContent;
}

void writeZipFile( std::string content )
{
    char filename[]="test.text";
    fstream fp;
    fp.open(filename, ios::out);
    if(!fp){
        std::cout<<"Fail to open file: "<<filename<<std::endl;
    }

    fp<<content<<endl;
    fp.close();
}

int main( int argc, char* argv[] )
{
    std::string zipStr = gz_io("test.tar.gz");
    std::cout<<zipStr<<std::endl;
    writeZipFile( zipStr );

    return 0;
}



0 意見:

張貼留言