Wielkość zdekompresowanego pliku LUB zarządzanie wieloma buforami

0

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ź! **

1 użytkowników online, w tym zalogowanych: 0, gości: 1