2016-09-05 3 views
0

コードでファイルを圧縮しようとしています。このエラーは、静的voidメソッドCopyStreamの "dest.Write(buffer、0、len);"行にあります。エラーは "Bad state(不明な圧縮方法(0x4D))"です。何が起こっているのでしょうか?C#のコードでファイルを圧縮する方法は?

public byte[] ZippingFile() 
    { 
     MemoryStream dest = new MemoryStream(); 
     FileStream file = new FileStream(tbPath.Text + @"\" + tbFileName.Text, FileMode.Open, FileAccess.Read); 
     byte[] array = new byte[0]; 
     try 
     { 
      ZlibDecompression(file, dest); 
      array = dest.ToArray(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, 
          MessageBoxIcon.Error); 
     } 
     finally 
     { 
      file.Close(); 
      dest.Close(); 
     } 
     return niz; 
    } 


    private void ZlibDecompression(Stream src, MemoryStream dest) 
    { 
     src.Seek(0, SeekOrigin.Begin); 
     using (ZlibStream zlibStreamOut = new ZlibStream(dest, CompressionMode.Decompress, CompressionLevel.Level4, true)) 
     { 
      CopyStream(src, zlibStreamOut); 
      zlibStreamOut.Close(); 
      dest.Seek(0, SeekOrigin.Begin); 
     } 
    } 

    static void CopyStream(Stream src, Stream dest) 
    { 
     byte[] buffer = new byte[1024]; 
     int len = src.Read(buffer, 0, buffer.Length); 
     while (len > 0) 
     { 
      dest.Write(buffer, 0, len); 
      len = src.Read(buffer, 0, buffer.Length); 
     } 
     dest.Flush(); 
    } 
+0

ZlibDecompressionが圧縮されていないファイルを解凍したように思えました。 –

答えて

1

ファイルを「圧縮」しようとしている場合は、CompressionMode.Compressを使用する必要があります。 "未知の圧縮方法(0x4D)"はおそらく、圧縮ルーチンがファイルがどのように圧縮されたかのコードを見つけることを期待している位置にMという文字があることを意味します。

+0

ありがとうございます。それがエラーでした。 – Nemanja

関連する問題