加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:57:36 所属栏目:百科 来源:网络整理
导读:我需要创建一个目录的tarball,然后用C中的bz2进行压缩.有没有使用libtar和libbz2的体面教程? 解决方法 好的,我为你做了一个快速的例子.没有错误检查和各种任意决定,但它的工作. libbzip2具有相当的 good web documentation. libtar,而不是这么多,但是在包中
我需要创建一个目录的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;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读