使用bzlib.h在C中进行BZ2压缩

我目前需要一些帮助学习如何使用bzlib.h头文件.我想知道是否有人会如此善良地帮助我在C中找出compressToBZ2()函数而不使用任何Boost库?

void compressBZ2(std::string file)
{
std::ifstream infile;
int fileDestination = infile.open(file.c_str());

char bz2Filename[] = "file.bz2";
FILE *bz2File = fopen(bz2Filename, "wb");
int bzError;
const int BLOCK_MULTIPLIER = 7;
BZFILE *myBZ = BZ2_bzWriteOpen(&bzError, bz2File, BLOCK_MULTIPLIER, 0, 0);

const int BUF_SIZE = 10000;
char* buf = new char[BUF_SIZE];
ssize_t bytesRead;

while ((bytesRead = read(fileDestination, buf, BUF_SIZE)) > 0)
{
    BZ2_bzWrite(&bzError, myBZ, buf, bytesRead);
}

BZ2_bzWriteClose(&bzError, myBZ, 0, NULL, NULL);

delete[] buf;
}

我一直试图做的是使用这样的东西,但我没有运气.我想获得.bz2文件而不是.tar.bz2

有帮助吗?

解决方法:

这两行是错误的:

int fileDestination = infile.open(file.c_str());

// ...

while ((bytesRead = read(fileDestination, buf, BUF_SIZE)) > 0)

这不是std::ifstream的工作原理.例如,如果你看一下std::ifstream::open它就不会返回任何东西.看来你正在将旧系统调用open / read与C stream概念混淆.

做就是了:

infile.open(file.c_str());

// ...

while (infile.read(buf, BUF_SIZE))

我建议您阅读有关使用流的更多信息.

上一篇:linux压缩和打包工具gzip_bzip2_xz_zip_tar


下一篇:python – 将bz2压缩二进制文件导入为numpy数组