2011-05-15 92 views
1

我有decomress gzip的问题:问题与解压缩,GZipStream

string fileData = string.Empty; 
// byte[] starts with 31 and 139 
var gzBuffer = entity.Data.Skip(pos).ToArray(); 
using (GZipStream stream = new GZipStream(new MemoryStream(gzBuffer),CompressionMode.Decompress)) 
{ 
    const int size = 4096; 
    byte[] buffer = new byte[size]; 
    using (MemoryStream memory = new MemoryStream()) 
    { 
     int count = 0; 
     do 
     { 
      count = stream.Read(buffer, 0, size); 
      if (count > 0) 
      { 
       memory.Write(buffer, 0, count); 
      } 
     } while (count > 0); 
     fileData = Encoding.UTF8.GetString(memory.ToArray()); 
    } 
} 

在调试程序,计数等于百达0问题出在哪里?
谢谢。

+0

此流是如何压缩的?我在过去也经历过这个问题,错误实际上是在压缩逻辑中。 – 2011-05-15 13:21:33

+0

你检查过gzbuffer吗?也许它是空的。 – Saleh 2011-05-15 13:24:05

+0

@ Jan-Peter Vos:我不能肯定地说,因为这条消息来自网络。 – user348173 2011-05-15 13:28:31

回答

0

不知道这对你有多大帮助,但我会尽力的。这是我在示例项目中使用GZIP压缩/解压缩文件的内容。也许你可以根据你的需要调整这些代码?

public string Compress(FileInfo fi) 
{ 
    string outPath; 

    using (FileStream inFile = fi.OpenRead()) 
    { 
     outPath = fi.FullName + ".gz"; 
     using (FileStream outFile = File.Create(outPath)) 
     { 
      using (var compress = new GZipStream(outFile, 
               CompressionMode.Compress)) 
      { 
       inFile.CopyTo(compress); 
      } 
     } 
    } 

    return outPath; 
} 

public void Decompress(FileInfo fi) 
{ 
    using (FileStream inFile = fi.OpenRead()) 
    { 
     string curFile = fi.FullName; 
     string origName = curFile.Remove(curFile.Length - fi.Extension.Length); 

     using (FileStream outFile = File.Create(origName)) 
     { 
      using (var decompress = new GZipStream(inFile, 
                CompressionMode.Decompress)) 
      { 
       decompress.CopyTo(outFile); 
      } 
     } 
    } 
}