2013-01-20 2 views
5

.gz 파일이 여러 개인 경우 하나씩 압축을 풀고 싶습니다. C#에서 GzipStream을 사용하여 간단한 코드를 작성했지만 실패했습니다. 내가 원하는 것을 성취 할 수있는 정확하고 유용한 방법이 궁금합니다. 고마워.GZipStream을 사용하여 .gz 파일 압축 해제

private string Extrgz(string infile) 
{ 
    string dir = Path.GetDirectoryName(infile); 
    string decompressionFileName = dir + Path.GetFileNameWithoutExtension(infile) + "_decompression.bin"; 
    using (GZipStream instream = new GZipStream(File.OpenRead(infile), CompressionMode.Compress))// ArgumentException... 
    { 
     using (FileStream outputStream = new FileStream(decompressionFileName, FileMode.Append, FileAccess.Write)) 
     { 
      int bufferSize = 8192, bytesRead = 0; 
      byte[] buffer = new byte[bufferSize]; 
      while ((bytesRead = instream.Read(buffer, 0, bufferSize)) > 0) 
      { 
       outputStream.Write(buffer, 0, bytesRead); 
      } 
     } 
    } 
    return decompressionFileName; 
} 
+0

어떤 예외/오류? –

+0

@ Dan-o 인수 "stream"에 오류가 있습니다. –

답변

10

당신은 압축 할 필요가 있지만, CompressionMode.Compress을 설정 CompressionMode.Decompress로 교체하십시오.

예 : here. 여기

+1

네, 맞습니다. –

1

:

public static void DeCompressFile(string CompressedFile, string DeCompressedFile) 
{ 
    byte[] buffer = new byte[1024 * 1024]; 

    using (System.IO.FileStream fstrmCompressedFile = System.IO.File.OpenRead(CompressedFile)) // fi.OpenRead()) 
    { 
     using (System.IO.FileStream fstrmDecompressedFile = System.IO.File.Create(DeCompressedFile)) 
     { 
      using (System.IO.Compression.GZipStream strmUncompress = new System.IO.Compression.GZipStream(fstrmCompressedFile, 
        System.IO.Compression.CompressionMode.Decompress)) 
      { 
       int numRead = strmUncompress.Read(buffer, 0, buffer.Length); 

       while (numRead != 0) 
       { 
        fstrmDecompressedFile.Write(buffer, 0, numRead); 
        fstrmDecompressedFile.Flush(); 
        numRead = strmUncompress.Read(buffer, 0, buffer.Length); 
       } // Whend 

       //int numRead = 0; 

       //while ((numRead = strmUncompress.Read(buffer, 0, buffer.Length)) != 0) 
       //{ 
       // fstrmDecompressedFile.Write(buffer, 0, numRead); 
       // fstrmDecompressedFile.Flush(); 
       //} // Whend 

       strmUncompress.Close(); 
      } // End Using System.IO.Compression.GZipStream strmUncompress 

      fstrmDecompressedFile.Flush(); 
      fstrmDecompressedFile.Close(); 
     } // End Using System.IO.FileStream fstrmCompressedFile 

     fstrmCompressedFile.Close(); 
    } // End Using System.IO.FileStream fstrmCompressedFile 

} // End Sub DeCompressFile 


// http://www.dotnetperls.com/decompress 
public static byte[] Decompress(byte[] gzip) 
{ 
    byte[] baRetVal = null; 
    using (System.IO.MemoryStream ByteStream = new System.IO.MemoryStream(gzip)) 
    { 

     // Create a GZIP stream with decompression mode. 
     // ... Then create a buffer and write into while reading from the GZIP stream. 
     using (System.IO.Compression.GZipStream stream = new System.IO.Compression.GZipStream(ByteStream 
      , System.IO.Compression.CompressionMode.Decompress)) 
     { 
      const int size = 4096; 
      byte[] buffer = new byte[size]; 
      using (System.IO.MemoryStream memory = new System.IO.MemoryStream()) 
      { 
       int count = 0; 
       count = stream.Read(buffer, 0, size); 
       while (count > 0) 
       { 
        memory.Write(buffer, 0, count); 
        memory.Flush(); 
        count = stream.Read(buffer, 0, size); 
       } 

       baRetVal = memory.ToArray(); 
       memory.Close(); 
      } 

      stream.Close(); 
     } // End Using System.IO.Compression.GZipStream stream 

     ByteStream.Close(); 
    } // End Using System.IO.MemoryStream ByteStream 

    return baRetVal; 
} // End Sub Decompress