2014-09-30 33 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,我給出了「zlib」流的指令,它比gzip更原始。除了deflate壓縮的內容之外,gzip還有一個目錄和其他內容。

對於gzip,請使用框架的System.IO.Compression.GZipStream類,正如Mike_G的答案所示。

+0

有什麼機會可以擴展一下嗎?這似乎與我正在尋找的線條一致,但對於像我一樣綠色的人來說,這有點神祕。抱歉。 : -/ – Eiketsu 2014-09-30 13:40:03

1

這是我用gzip的-ING的對象:

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 2014-09-30 13:40:20

+0

我也爲文件流添加一個方法 – 2014-09-30 13:41:54

相關問題