c++ - 在 C++ 中使用 bzlib.h,bzip2 BZ2压缩

  显示原文与译文双语对照的内容

我现在需要一些帮助学习如何使用 bzlib.h 头。 如果你想让我帮你算出一个 compressToBZ2() 函数,那么你可以在没有任何提升库的情况下,帮我计算出一个函数?


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;


}



我一直在试着用这样的东西,但是我没有。 我正在尝试获取一个不符合. tar. bz2的. bz2 文件

任何帮助?

时间: 原作者:

这两行是错误的:


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



//...



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



这不是 std::ifstream 工作的方式。 例如如果你查看 std::ifstream::open,它不会返回任何内容。 看起来你把 open/read的旧系统与 C++ 流概念混合起来了。

只需:


infile.open(file.c_str());



//...



while (infile.read(buf, BUF_SIZE))



我建议你更多地了解使用流。

原作者:
...