如何使用C中的libbz2压缩目录

前端之家收集整理的这篇文章主要介绍了如何使用C中的libbz2压缩目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要创建一个目录的tarball,然后用C中的bz2进行压缩.有没有使用libtar和libbz2的体面教程?

解决方法

好的,我为你做了一个快速的例子.没有错误检查和各种任意决定,但它的工作. libbzip2具有相当的 good web documentation. libtar,而不是这么多,但是在包中有联机帮助页,一个例子和一个记录的头文件.以下可以使用g C TarBz2.cpp -ltar -lbz2 -o C TarBz2.exe构建:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <libtar.h>
#include <bzlib.h>
#include <unistd.h>

int main()
{
    TAR *pTar;
    char tarFilename[] = "file.tar";
    char srcDir[] = "dirToZip/";
    char extractTo[] = ".";

    tar_open(&pTar,tarFilename,NULL,O_WRONLY | O_CREAT,0644,TAR_GNU);
    tar_append_tree(pTar,srcDir,extractTo);

    close(tar_fd(pTar));

    int tarFD = open(tarFilename,O_RDONLY);

    char tbz2Filename[] =  "file.tar.bz2";
    FILE *tbz2File = fopen(tbz2Filename,"wb");
    int bzError;
    const int BLOCK_MULTIPLIER = 7;
    BZFILE *pBz = BZ2_bzWriteOpen(&bzError,tbz2File,BLOCK_MULTIPLIER,0);

    const int BUF_SIZE = 10000;
    char* buf = new char[BUF_SIZE];
    ssize_t bytesRead;
    while((bytesRead = read(tarFD,buf,BUF_SIZE)) > 0) {
        BZ2_bzWrite(&bzError,pBz,bytesRead);
    }        
    BZ2_bzWriteClose(&bzError,NULL);
    close(tarFD);
    remove(tarFilename);

    delete[] buf;

}

猜你在找的C&C++相关文章