2014-09-30 2 views

답변

0

이 내가이 경우에 의지 감아 것입니다.

string jobDirVar = [FilePath]; 
    byte[] bytesToCompress = File.ReadAllBytes(jobDirVar); 
    byte[] decompressedBytes = new byte[bytesToCompress.Length]; 
    using (FileStream fileToCompress = File.Create(FilePath)) 
     { 
      using (GZipStream compressionStream = new GZipStream(fileToCompress, CompressionMode.Compress)) 
      { 
       compressionStream.Write(bytesToCompress, 0, bytesToCompress.Length); 
      } 
     } 

     using (FileStream fileToDecompress = File.Open(FilePath, FileMode.Open)) 
     { 
      using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress)) 
      { 
       decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length); 
      } 
     } 

그것은 코딩의 예쁜 비트 아니지만, 내가 후 무엇으로 저를 제공 한 것으로 보인다. 조금이라도 합리화할만한 것이 있다면 누구나 아직도 듣고 싶습니다.

1

.NET Framework는 기본 라이브러리에 System.IO.Compression.DeflateStream 클래스를 제공합니다. DEFLATE 압축 알고리즘을 구현합니다. zlib 스트림은 zlib 매직 바이트 다음에 DEFLATE 알고리즘으로 압축 된 내용입니다.

oops, gzip보다 원시인 "zlib"스트림에 대한 지침을 제공했습니다. gzip에는 압축 된 압축 컨텐츠 외에도 디렉토리 및 기타 항목이 있습니다.

gzip의 경우 Mike_G의 답변과 같이 프레임 워크의 System.IO.Compression.GZipStream 클래스를 사용하십시오.

+0

조금이라도 확장 할 수 있다면 어떨까요? 그것은 내가 찾고있는 라인을 따라있는 것 같지만, 조금은 ... 나는 여전히 그린처럼 누군가를 알 수 없다. 죄송합니다. :/ – Eiketsu

1

이것은 내가 gzip으로 보내고 객체를 사용할 것입니다 :

byte[] initialBytes = //object serialized to bytes 
byte[] compressedBytes; 

     using (MemoryStream stream = new MemoryStream(initialBytes)) 
     { 
      using (MemoryStream output = new MemoryStream()) 
      { 
       using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress)) 
       { 
        Pump(stream, zipper); 
       } 

       compressedBytes = output.ToArray(); 
      } 
     } 

return compressedBytes; 


//pump method 

internal static void Pump(Stream input, Stream output) 
    { 
     byte[] bytes = new byte[4096]; 
     int n; 
     while ((n = input.Read(bytes, 0, bytes.Length)) != 0) 
     { 
      output.Write(bytes, 0, n); 
     } 
    } 

내가 파일을해야하는 경우가 :

byte[] result; 

     using(FileStream file = //some filestream I created) 
     { 
      file.Position = 0; 

      using (MemoryStream output = new MemoryStream()) 
      { 
       using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress)) 
       { 
        Pump(file, zipper); 

       } 

       result = output.ToArray(); 
      } 
     } 



     return result; 
+0

나는 이것을 사용해보고 내가 관리 할 수있는 것을 보게 될 것이다. 고맙습니다. :) – Eiketsu

+0

아예 또한 파일 스트림에 대한 메소드 추가 –