c++ - 如何在 C++ 中使用 libbz2 压缩目录

标签 c++ compression tar bzip2

我需要创建一个目录的 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, 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, buf, bytesRead);
    }        
    BZ2_bzWriteClose(&bzError, pBz, 0, NULL, NULL);
    close(tarFD);
    remove(tarFilename);

    delete[] buf;

}

关于c++ - 如何在 C++ 中使用 libbz2 压缩目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813223/

相关文章:

compression - 有安全的方法对两个zip压缩文件运行diff吗?

c++ - 查找重叠 1 位的计数

c++ - 析构函数 C++ 中的异常

c++ - 用空花括号初始化

c# - C# 中字符串的 LZW 压缩

linux - Bash 无意义 - 变量未正确传递

c++ - QGraphicsScene/View 比例理解

regex - 如何使用python脚本在linux中压缩多个文件?

bash - 对于查看 .tgz 文件中的源文件有什么建议吗?

linux - 使用 bash 从 tar.gz 中提取 1 个文件