GZip解压缩

  1 public class GZipHelper
  2     {
  3         public static void DecompressFile(string sourceFile, string destinationFile)
  4         {
  5             // make sure the source file is there
  6             if (File.Exists(sourceFile) == false)
  7                 throw new FileNotFoundException();
  8 
  9             // Create the streams and byte arrays needed
 10             FileStream sourceStream = null;
 11             FileStream destinationStream = null;
 12             GZipStream decompressedStream = null;
 13             byte[] quartetBuffer = null;
 14 
 15             try
 16             {
 17                 // Read in the compressed source stream
 18                 sourceStream = new FileStream(sourceFile, FileMode.Open);
 19 
 20                 // Create a compression stream pointing to the destiantion stream
 21                 decompressedStream = new GZipStream(sourceStream, CompressionMode.Decompress, true);
 22 
 23                 // Read the footer to determine the length of the destiantion file
 24                 quartetBuffer = new byte[4];
 25                 int position = (int)sourceStream.Length - 4;
 26                 sourceStream.Position = position;
 27                 sourceStream.Read(quartetBuffer, 0, 4);
 28                 sourceStream.Position = 0;
 29                 int checkLength = BitConverter.ToInt32(quartetBuffer, 0);
 30 
 31                 byte[] buffer = new byte[checkLength + 100];
 32 
 33                 int offset = 0;
 34                 int total = 0;
 35 
 36                 // Read the compressed data into the buffer
 37                 while (true)
 38                 {
 39                     int bytesRead = decompressedStream.Read(buffer, offset, 100);
 40 
 41                     if (bytesRead == 0)
 42                         break;
 43 
 44                     offset += bytesRead;
 45                     total += bytesRead;
 46                 }
 47 
 48                 // Now write everything to the destination file
 49                 destinationStream = new FileStream(destinationFile, FileMode.Create);
 50                 destinationStream.Write(buffer, 0, total);
 51 
 52                 // and flush everyhting to clean out the buffer
 53                 destinationStream.Flush();
 54             }
 55             catch (ApplicationException ex)
 56             {
 57                 //MessageBox.Show(ex.Message, "解压文件时发生错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
 58                 throw ex;
 59             }
 60             finally
 61             {
 62                 // Make sure we allways close all streams
 63                 if (sourceStream != null)
 64                     sourceStream.Close();
 65 
 66                 if (decompressedStream != null)
 67                     decompressedStream.Close();
 68 
 69                 if (destinationStream != null)
 70                     destinationStream.Close();
 71             }
 72 
 73         }
 74 
 75         public static void CompressFile(string sourceFile, string destinationFile)
 76         {
 77             // make sure the source file is there
 78             if (File.Exists(sourceFile) == false)
 79                 throw new FileNotFoundException();
 80 
 81             // Create the streams and byte arrays needed
 82             byte[] buffer = null;
 83             FileStream sourceStream = null;
 84             FileStream destinationStream = null;
 85             GZipStream compressedStream = null;
 86 
 87             try
 88             {
 89                 // Read the bytes from the source file into a byte array
 90                 sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read);
 91 
 92                 // Read the source stream values into the buffer
 93                 buffer = new byte[sourceStream.Length];
 94                 int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);
 95 
 96                 if (checkCounter != buffer.Length)
 97                 {
 98                     throw new ApplicationException();
 99                 }
100 
101                 // Open the FileStream to write to
102                 destinationStream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write);
103 
104                 // Create a compression stream pointing to the destiantion stream
105                 compressedStream = new GZipStream(destinationStream, CompressionMode.Compress, true);
106 
107                 // Now write the compressed data to the destination file
108                 compressedStream.Write(buffer, 0, buffer.Length);
109             }
110             catch (ApplicationException ex)
111             {
112                 //MessageBox.Show(ex.Message, "压缩文件时发生错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
113                 throw ex;
114             }
115             finally
116             {
117                 // Make sure we allways close all streams
118                 if (sourceStream != null)
119                     sourceStream.Close();
120 
121                 if (compressedStream != null)
122                     compressedStream.Close();
123 
124                 if (destinationStream != null)
125                     destinationStream.Close();
126             }
127         }
128     }

 

转载于:https://www.cnblogs.com/zhanhengzong/archive/2012/12/11/2813323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值