2016-04-16 21 views
0

私はアプリケーションで、Linuxでzlibを使ってアーカイブ処理を実装しようとしています。このアプリはQt5でC++で書かれています。Zlib解凍機能は解凍の代わりにコピーします

これは私の例の機能である:

int Foo::decompress(const QString &file) 
{ 
    char buffer[128]; 
    int num_read=0; 
    gzFile fi = gzopen(file.toUtf8().constData(),"rb"); 
    FILE *outfile = fopen("/Data/test.unz", "wb"); 
    if (!fi || !outfile) return -1; 
    while ((num_read = gzread(fi, buffer, sizeof(buffer))) > 0) { 
    fwrite(buffer, 1, num_read, outfile); 
    } 
    gzclose(fi); 
    fclose(outfile); 
} 

このコードは、代わりにそれを解凍するの、私はそれを養うどんなファイルコピーする原因となります。私はいくつかのzlib圧縮解除のトピックを読んだことがありますが、それらはすべて私の混乱に加わります。

助けが必要ですか?

+0

これを実行した後、 '/ Data/test.unz'に解凍されたコンテンツが含まれています。そうでなければ、入力ファイルが実際に最初にgzipされたことを確かめますか? 'gunzip'コマンドラインユーティリティはあなたが望むことをしますか? –

+0

さて、いいえ、言及したように、それは単にzipファイルのコピーです。明確にするために、私は将来すべての種類のアーカイブを使用することを期待していますが、私は今は普通の古いzipファイルを使用しています。 –

答えて

0

入力はgzipファイルではありません。 gzread()fread()のドロップイン置換の役割を果たします。その結果、入力がgzipファイルではない場合、fread()のように動作し、変換なしでファイルを読み取ります。

あなたの入力は明らかにgzipファイルではないので、「アーカイブ処理」と言っているので、ファイル形式について混乱しているように聞こえます。 .zipファイルを読み込もうとしている場合、それはgzipファイルとはまったく異なるものです。