Tôi có tệp archive.zip chứa hai tệp ".txt" được mã hóa. Tôi muốn giải nén kho lưu trữ để lấy 2 tệp đó.Giải nén tệp zip bằng zlib
Dưới đây là những gì tôi đã làm như vậy cho đến nay:
FILE *FileIn = fopen("./archive.zip", "rb");
if (FileIn)
printf("file opened\n");
else
printf("unable to open file\n");
fseek(FileIn, 0, SEEK_END);
unsigned long FileInSize = ftell(FileIn);
printf("size of input compressed file : %u\n", FileInSize);
void *CompDataBuff = malloc(FileInSize);
void *UnCompDataBuff = NULL;
int fd = open ("archive.zip", O_RDONLY);
CompDataBuff = mmap(NULL, FileInSize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
printf("buffer read : %s\n", (char *)CompDataBuff);
uLongf UnCompSize = (FileInSize * 11/10 + 12);
UnCompDataBuff = malloc(UnCompSize);
int ret_uncp ;
ret_uncp = uncompress((Bytef*)UnCompDataBuff, &UnCompSize, (const Bytef*)CompDataBuff,FileInSize);
printf("size of uncompressed data : %u\n", UnCompSize);
if (ret_uncp == Z_OK){
printf("uncompression ok\n");
printf("uncompressed data : %s\n",(char *)UnCompDataBuff);
}
if (ret_uncp == Z_MEM_ERROR)
printf("uncompression memory error\n");
if (ret_uncp == Z_BUF_ERROR)
printf("uncompression buffer error\n");
if (ret_uncp == Z_DATA_ERROR)
printf("uncompression data error\n");
tôi luôn luôn nhận được "lỗi dữ liệu uncompression" và tôi không biết tại sao. Và sau đó tôi muốn biết làm thế nào để lấy 2 tập tin với dữ liệu của tôi không nén.
Oh thực sự, tôi đã chắc chắn rằng zlib sẽ đối phó với .zip .. dù sao cảm ơn thông tin! :) – user1336204
zlib thực tế có thể giúp xử lý zip và phân phối nguồn đi kèm với mã được đóng góp để xử lý các tệp zip. Xem câu trả lời của tôi. –
Ồ, và libzip sử dụng zlib. –