.NET 自带的压缩和解压

System.IO.Compression命名空间包含如下的基本的文件和流压缩和解压缩服务的类型, 还可以使用这些类型来读取和修改压缩文件的内容,主要有以下类:

ZipFile

ZipArchive

ZipArchiveEntry

DeflateStream

GZipStream 

1.使用 ZipFile 类创建和提取有一个 .zip 文件扩展名的压缩文件:必须引用System.IO.Compression.FileSystem 程序集。

[csharp]  view plain  copy
  1. using System;  
  2. using System.IO;  
  3. using System.IO.Compression;  
  4.   
  5. namespace ConsoleApplication  
  6. {  
  7.     class Program  
  8.     {  
  9.         static void Main(string[] args)  
  10.         {  
  11.             string startPath = @"c:\example\start";  
  12.             string zipPath = @"c:\example\result.zip";  
  13.             string extractPath = @"c:\example\extract";  
  14.   
  15.             ZipFile.CreateFromDirectory(startPath, zipPath);  
  16.   
  17.             ZipFile.ExtractToDirectory(zipPath, extractPath);  
  18.         }  
  19.     }  
  20. }  

2.通过现存的.zip文件的内容重复存档并提取有一个 .txt 扩展名的文件。 它使用 ZipArchive 类访问现有的 .zip 文件与 ZipArchiveEntry 类来检查压缩文件的各个项,必须 引用项目的System.IO.Compression.FileSystem 程序集。

[csharp]  view plain  copy
  1. using System;  
  2. using System.IO;  
  3. using System.IO.Compression;  
  4.   
  5. namespace ConsoleApplication1  
  6. {  
  7.     class Program  
  8.     {  
  9.         static void Main(string[] args)  
  10.         {  
  11.             string zipPath = @"c:\example\start.zip";  
  12.             string extractPath = @"c:\example\extract";  
  13.   
  14.             using (ZipArchive archive = ZipFile.OpenRead(zipPath))  
  15.             {  
  16.                 foreach (ZipArchiveEntry entry in archive.Entries)  
  17.                 {  
  18.                     if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))  
  19.                     {  
  20.                         entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));  
  21.                     }  
  22.                 }  
  23.             }   
  24.         }  
  25.     }  
  26. }  
3.使用 ZipArchive 类访问现有的 .zip 文件,然后添加新文件到压缩文件。 当添加到现有的 .zip 文件时,新文件获取压缩。

[csharp]  view plain  copy
  1. namespace ConsoleApplication  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))  
  8.             {  
  9.                 using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))  
  10.                 {  
  11.                     ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");  
  12.                     using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))  
  13.                     {  
  14.                             writer.WriteLine("Information about this package.");  
  15.                             writer.WriteLine("========================");  
  16.                     }  
  17.                 }  
  18.             }  
  19.         }  
  20.     }  
  21. }  
4.使用 GZipStream 和 DeflateStream 类压缩和解压缩数据。 它们使用相同的压缩算法。 写入文件扩展名为 .gz 的压缩GZipStream 对象可以通过使用许多常用工具,除了 GZipStream提供的方法之外,被解压
[csharp]  view plain  copy
  1. public class Program  
  2.   {  
  3.       private static string directoryPath = @"c:\temp";  
  4.       public static void Main()  
  5.       {  
  6.           DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);  
  7.           Compress(directorySelected);  
  8.   
  9.           foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))  
  10.           {  
  11.               Decompress(fileToDecompress);  
  12.           }  
  13.       }  
  14.   
  15.       public static void Compress(DirectoryInfo directorySelected)  
  16.       {  
  17.           foreach (FileInfo fileToCompress in directorySelected.GetFiles())  
  18.           {  
  19.               using (FileStream originalFileStream = fileToCompress.OpenRead())  
  20.               {  
  21.                   if ((File.GetAttributes(fileToCompress.FullName) &   
  22.                      FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")  
  23.                   {  
  24.                       using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))  
  25.                       {  
  26.                           using (GZipStream compressionStream = new GZipStream(compressedFileStream,   
  27.                              CompressionMode.Compress))  
  28.                           {  
  29.                               originalFileStream.CopyTo(compressionStream);  
  30.   
  31.                           }  
  32.                       }  
  33.                       FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");  
  34.                       Console.WriteLine("Compressed {0} from {1} to {2} bytes.",  
  35.                       fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString());  
  36.                   }  
  37.   
  38.               }  
  39.           }  
  40.       }  
  41.   
  42.       public static void Decompress(FileInfo fileToDecompress)  
  43.       {  
  44.           using (FileStream originalFileStream = fileToDecompress.OpenRead())  
  45.           {  
  46.               string currentFileName = fileToDecompress.FullName;  
  47.               string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);  
  48.   
  49.               using (FileStream decompressedFileStream = File.Create(newFileName))  
  50.               {  
  51.                   using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))  
  52.                   {  
  53.                       decompressionStream.CopyTo(decompressedFileStream);  
  54.                       Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);  
  55.                   }  
  56.               }  
  57.           }  
  58.       }  

原文:http://blog.csdn.net/zhulongxi/article/details/51819431
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值