확장 또는 제 3자를 사용하지 않고 zlib을 사용하여 zip 파일의 압축을 푸는 중입니다. 처음에는 src_len이 48756255이고 dest_len은 49209890입니다. while 루프의 첫 번째 패스는 오류가 있습니다. 오류가 Z_OK이고 두 번째 통과가 시작됩니다. 두 번째 단계에서, 내가 무엇을해도 Z_BUF_ERROR가 부풀려집니다. 이 시점에서 stream.total_out은 49034460이므로 남은 비트가 있지만 두 번째 패스의 stream.avail_in은 0입니다. 어쨌든 inflate가 Z_STREAM_END을 주길 기대합니다. 나는 정말로 무슨 일이 일어나고 있는지 모른다. 아무도 도와 줄 수 있니?zlib가 버퍼 오류를 반환합니다.
void compression::uncompress2(char* dest, unsigned dest_len, char* src, unsigned src_len) {
TempAllocator ta;
z_stream_s stream = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
stream.next_in = (Bytef*)src;
stream.avail_in = (uInt)src_len;
stream.next_out = (Bytef*)dest;
stream.avail_out = (uInt)dest_len;
stream.zalloc = zalloc;
stream.zfree = zfree;
stream.opaque = &ta;
// no header
int err = inflateInit2(&stream, -MAX_WBITS);
XENSURE(err == Z_OK);
bool done = false;
while (!done) {
stream.next_out = (Bytef*)(dest + stream.total_out);
stream.avail_out = dest_len - stream.total_out;
err = inflate(&stream, Z_SYNC_FLUSH);
if (err == Z_STREAM_END)
done = true;
else if (err != Z_OK) {
break;
}
}
err = inflateEnd(&stream);
XENSURE(err == Z_OK);
}
"TempAllocator"란 무엇입니까? 작동합니까? 내가하는 방식은 다음과 같습니다. http://pastebin.com/PdGWX4cc inflate2 대신 inflate2를 사용하지만 변경할 수는 있지만 여전히 잘 작동합니다. – Brandon
게시 한 코드를 시도했지만 stream_end 대신 끝에 버퍼 오류가 표시됩니다. –