Wielkość zdekompresowanego pliku LUB zarządzanie wieloma buforami

Odpowiedz Nowy wątek
2011-10-04 21:11
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ź! **
edytowany 1x, ostatnio: 4ggr35510n, 2011-10-04 21:12

Pozostało 580 znaków

2011-10-04 21:13
Odpowiedz
Liczba odpowiedzi na stronę

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