2016-06-09 53 views
0

我有一個3.2GB的gzip文件,我需要解壓縮,但使用我的代碼的輸出只產生一個64KB的文件,這是不正確的。解壓縮大的Gzip文件無法使用System.IO.Compression

using (FileStream originalFileStream = fileToDecompress.OpenRead()) 
{ 
    string currentFileName = fileToDecompress.FullName; 
    string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length); 

    using (FileStream decompressedFileStream = File.Create(newFileName)) 
    { 
     using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress)) 
     { 
      decompressionStream.CopyTo(decompressedFileStream); 
      Console.WriteLine("Decompressed: {0}", fileToDecompress.Name); 
     } 
    } 
} 

我使用.NET 4.5和CopyTo方法,我知道應該使用大於4GB的文件,但我沒有運氣。任何幫助,將不勝感激。

+1

您的原始GZip文件是如何創建的? –

+0

未知,很可能在linux中使用gzip命令。我知道這是一個有效的文件,因爲7zip能夠解壓縮它沒有問題,但在C#實現中並非如此。 –

回答

0

我找到了一個解決方案,但它涉及到一些代碼更改爲.NET的開源解壓縮項目。基本上,當你有多個gzip流並且它們文件太大時,問題就會出現。在代碼內部使用int而不是長整型,這導致我遇到的行爲。一旦代碼被修改,它按預期工作。

3

我強烈建議您使用DotNetZip's接口到zlib而不是NET 4.5(或NET任何版本)。 NET 4.5在微軟聲明他們的界面有錯誤won't fix(!)。