Я пытаюсь прочитать файл test.zip с помощью библиотеки zlib и извлечь содержимое. Мое требование - считывать каждый файл и выводить содержимое (распаковывать) сначала в память, а затем в файл.Использование zlib с mingw
Я попытался следующий код:
#include <iostream>
#include <zlib.h>
using namespace std;
#define LINE 1024
int main()
{
const char *filename = "hello.zip";
gzFile inFileZ = gzopen(filename, "rb");
if (inFileZ == NULL) {
printf("Error: Failed to gzopen %s\n", filename);
return -1;
}
unsigned char unzipBuffer[8192];
unsigned int unzippedBytes;
std::vector<unsigned char> unzippedData;
while (true) {
unzippedBytes = gzread(inFileZ, unzipBuffer, 8192);
if (unzippedBytes > 0) {
cout << unzippedBytes << endl;
for (int i = 0; i < unzippedBytes; i++) {
cout << unzipBuffer[i];
}
} else {
break;
}
}
gzclose(inFileZ);
return 0;
}
Я получил вышеупомянутый пример из Интернета. Было упомянуто, что gzread
раздувает содержимое и заполняет буфер (здесь unzipBuffer
). Однако, когда я пытался его распечатать, он печатал то же содержимое .zip-файла (пример PK.....
с нечитаемым кодом).
Я считаю, что неправильно использую API-интерфейсы zlib. Однако я не мог найти пример, связанный с этим. Может ли кто-нибудь помочь мне здесь?
спасибо за ваши комментарии. Можете ли вы поделиться некоторыми примерами, которые я могу использовать? Это очень поможет. – programmer
google - ваш друг. Вы найдете такие вещи, как libzip, libarchive, minizip и т. Д. –
Я пробовал там, но не нашел хорошего примера. Я видел cpipe.c от zlib.net, но я не нашел, как я могу использовать этот код, очень специфичный для моего требования. Но спасибо за вашу помощь :). – programmer