System.IO.Compression命名空间包含如下的基本的文件和流压缩和解压缩服务的类型, 还可以使用这些类型来读取和修改压缩文件的内容,主要有以下类:
ZipFile
ZipArchive
ZipArchiveEntry
DeflateStream
GZipStream
1.使用 ZipFile 类创建和提取有一个 .zip 文件扩展名的压缩文件:必须引用System.IO.Compression.FileSystem 程序集。
- using System;
- using System.IO;
- using System.IO.Compression;
- namespace ConsoleApplication
- {
- class Program
- {
- static void Main(string[] args)
- {
- string startPath = @"c:\example\start";
- string zipPath = @"c:\example\result.zip";
- string extractPath = @"c:\example\extract";
- ZipFile.CreateFromDirectory(startPath, zipPath);
- ZipFile.ExtractToDirectory(zipPath, extractPath);
- }
- }
- }
2.通过现存的.zip文件的内容重复存档并提取有一个 .txt 扩展名的文件。 它使用 ZipArchive 类访问现有的 .zip 文件与 ZipArchiveEntry 类来检查压缩文件的各个项,必须 引用项目的System.IO.Compression.FileSystem 程序集。
- using System;
- using System.IO;
- using System.IO.Compression;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- string zipPath = @"c:\example\start.zip";
- string extractPath = @"c:\example\extract";
- using (ZipArchive archive = ZipFile.OpenRead(zipPath))
- {
- foreach (ZipArchiveEntry entry in archive.Entries)
- {
- if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
- {
- entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
- }
- }
- }
- }
- }
- }
- namespace ConsoleApplication
- {
- class Program
- {
- static void Main(string[] args)
- {
- using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
- {
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
- {
- ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
- using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
- {
- writer.WriteLine("Information about this package.");
- writer.WriteLine("========================");
- }
- }
- }
- }
- }
- }
- public class Program
- {
- private static string directoryPath = @"c:\temp";
- public static void Main()
- {
- DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
- Compress(directorySelected);
- foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
- {
- Decompress(fileToDecompress);
- }
- }
- public static void Compress(DirectoryInfo directorySelected)
- {
- foreach (FileInfo fileToCompress in directorySelected.GetFiles())
- {
- using (FileStream originalFileStream = fileToCompress.OpenRead())
- {
- if ((File.GetAttributes(fileToCompress.FullName) &
- FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
- {
- using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
- {
- using (GZipStream compressionStream = new GZipStream(compressedFileStream,
- CompressionMode.Compress))
- {
- originalFileStream.CopyTo(compressionStream);
- }
- }
- FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");
- Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
- fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString());
- }
- }
- }
- }
- public static void Decompress(FileInfo fileToDecompress)
- {
- 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);
- }
- }
- }
- }
原文:http://blog.csdn.net/zhulongxi/article/details/51819431