Witam!
Piszę program dekompresujący pliki w formacie .gz ( korzystam z biblioteki zlib ).
Przejrzałem cały manual ( http://www.zlib.net/manual.html ) jednak muszę zwrócić się do was z pytaniem:
Czy istnieje jakaś możliwość określenia wielkości pliku po dekompresji ?
Jest to potrzebne by zalokować odpowiedni bufor przyjmujący zdekompresowane bajty.
#include <iostream>
#include "zlib.h"
#include <stdio.h>
using std::cout;
using std::endl;
int main() {
const char* fileName = "C:/plik.txt.gz";
gzFile hFile = gzopen(fileName, "rb");
if ( hFile == NULL ) {
return 1;
}
char* buf = new char[ __wielkosc_pliku(fileName) ];
int bajty_przeczytane = gzread ( hFile, (voidp) buf, bajty_do_przeczytania );
std::cout << buf;
return 0;
}
Oczywiście __wielkosc_pliku() może zwrócić liczbę bajtów skompresowanych (piaskownica fstream).
Jednak jak uzyskac bajty po dekompresji ?
Druga kwestia zagadnienia (jeśli byłoby uzyskanie takiej wartości niemożliwe):
W jaki sposób najszybciej / najefektywniej odczytać duży plik ?
W jaki sposób zarządzać wieloma buforami ?
Gdyby nie udało się " z góry " znać wielkości potrzebnej do zadeklarowania bufora, trzeba by ich zadeklarować kilka, aż w końcu funkcja gzread zwróci zero.
- Z góry dziękuję za odpowiedź! **