2011-05-15 24 views
0

ちょっと、私はIonic.zlibでファイルを圧縮するのに問題があります。私はC#でとても新しいので、問題は簡単に解けるかもしれません。私が大きなファイルを圧縮すると、サイズが500kbとし、圧縮ファイルが65536バイトに達すると、それは停止します。ファイルを解凍すると、多くのデータが失われます:/。私はバッファを400万のように設定することでこれを修正できますが、0x4000に設定するのが最善だと聞きました。圧縮ファイルが65536バイトに達したとき、Ionic.zlibは圧縮を停止しますか? - C#

 ZlibStream compressor = new ZlibStream(gsc_stream, CompressionMode.Compress, CompressionLevel.BestCompression, true); 
     byte[] buffer = new byte[0x4000]; 
     Int32 n; 

     int previous = Convert.ToInt32(zone.Position); 

     while ((n = compressor.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      zone.Write(buffer, 0, n); 

     } 
     zone.Flush(); 
     compressor.Flush(); 

答えて

1

あなたはそれを逆にしているように見えます。あなたは、ストリームgsc_streamにファイルを圧縮し、ストリームzoneに結果を書き込むしようとしている場合
正しいコードは次のようになります。

using (ZlibStream compressor = new ZlibStream(zone, CompressionMode.Compress, CompressionLevel.BestCompression, true)) 
{ 
    byte[] buffer = new byte[0x4000]; 
    int n; 
    while ((n = gsc_stream.Read(buffer, 0, buffer.Length)) != 0) 
    { 
     compressor.Write(buffer, 0, n); 
    } 
    zone.Flush(); 
    compressor.Flush(); 
} 
+0

も、もうzlibのヘッダーを持っていない、それはの部分を圧縮します私はファイルに私はそれを伝えませんでした。ちょっと、少なくとも65536バイトを超えました。 –

+0

@Levi "ファイルの部分"?私が知る限り、ファイルの一部を圧縮することはできません。 –

+0

トップ部分はゾーンで圧縮されていません。最初のgsc_streamがファイルに書き込まれるとすぐにそこからファイルの残りの部分が圧縮され、ポジションゾーンが始まる前であることを除いて、私が言ったように、zlibヘッダーは全くありません。 –

関連する問題