对文件和目录进行解压缩是一个非常常见的操作,在.NET Framework中为我们提供了:GZipStream类来对文件进行解压缩操作。此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。 这种格式可以通过不涉及专利使用权的方式轻松实现。DeflateStream 和 GZipStream 中的压缩功能作为流公开。 由于数据是以逐字节的方式读取的,因此无法通过进行多次传递来确定压缩整个文件或大型数据块的最佳方法。 对于未压缩的数据源,最好使用DeflateStream类。如果源数据已压缩,则使用这些类时实际上可能会增加流的大小。
单个文件进行解压缩
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 ///单个文件压缩 3 /// </summary> 4 /// <param name="fi"></param> 5 public static void Compress(FileInfo fi) 6 { 7 using (FileStream inFile = fi.OpenRead()) 8 { 9 if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fi.Extension != ".gz") 10 { 11 using (FileStream outFile = File.Create(fi.FullName + ".gz")) 12 { 13 using (GZipStream compress = new GZipStream(outFile, CompressionMode.Compress)) 14 { 15 inFile.CopyTo(compress); 16 Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fi.Name, fi.Length.ToString(), outFile.Length.ToString()); 17 } 18 } 19 } 20 } 21 } 22 23 /// <summary> 24 /// 单个文件解压 25 /// </summary> 26 /// <param name="fi"></param> 27 public static void Decompress(FileInfo fi) 28 { 29 using (FileStream inFile = fi.OpenRead()) 30 { 31 string curFile = fi.FullName; 32 string origName = curFile.Remove(curFile.Length - fi.Extension.Length); 33 34 using (FileStream outFile = File.Create(origName)) 35 { 36 using (GZipStream decompress = new GZipStream(inFile, CompressionMode.Decompress)) 37 { 38 decompress.CopyTo(outFile); 39 Console.WriteLine("Decompressed: {0}", fi.Name); 40 } 41 } 42 } 43 }
多个文件和目录解压缩
GZipStream类只提供了对单个文件进行解压缩,对于多个文件和目录进行解压缩操作需要自己添加代码来实现。实现可以参考下面的示例程序。点击这里:下载示例
参考资料:
http://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(v=vs.100)
http://www.cnblogs.com/huihui0630/archive/2009/12/04/1617332.html