C++ BZ2压缩在C++;用bzlib.h

C++ BZ2压缩在C++;用bzlib.h,c++,bzip2,C++,Bzip2,我目前需要一些帮助来学习如何使用bzlib.h头文件。我想知道有没有人会像这样帮助我找出C++中的CysToBuZ2()函数,而没有使用任何升压库?< /P> void compressBZ2(std::string file) { std::ifstream infile; int fileDestination = infile.open(file.c_str()); char bz2Filename[] = "file.bz2"; FILE *bz2File = fopen(bz2Fil

我目前需要一些帮助来学习如何使用bzlib.h头文件。我想知道有没有人会像这样帮助我找出C++中的CysToBuZ2()函数,而没有使用任何升压库?< /P>
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

有什么帮助吗?

试试libbzip2

它有C语言版本


有关代码示例,请参见:
dlltest.c

这两行是错误的:

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

// ...

while ((bytesRead = read(fileDestination, buf, BUF_SIZE)) > 0)
这不是工作原理。例如,如果您查看它,它不会返回任何内容。您似乎用C++流概念把旧系统调用<代码> >打开<代码> /<代码> Read < /C>。 只要做:

infile.open(file.c_str());

// ...

while (infile.read(buf, BUF_SIZE))

我建议您阅读更多有关使用流的内容。

我修改了循环,它正在工作

int BUF_SIZE = 1024 * 10;    
char* buf = new char[BUF_SIZE];
while(infile.tellg() >= 0) {
    infile.read(buf, BUF_SIZE);
    BZ2_bzWrite(&bzError, myBZ, buf, infile.gcount());
}    
BZ2_bzWriteClose(&bzError, myBZ, 0, NULL, NULL);

非常感谢你!这很有效。我想我对这些流做了些错事,因为我对它们不太熟悉。这个解决方案在这种情况下有效。必须将infle.gcount()传递给bz2u bzwrite。在当前接受的解决方案中,最终会得到一个空的bz2文件。根据请求修复了链接。