依赖:.NET Framework 4.5及以上,引用 - 添加引用 - 程序集
System.IO.Compression
System.IO.Compression.FileSystem
——————————————————————————————
针对文件夹的最简单的压缩与解压缩
1、目录必须存在
2、无法覆盖文件
ZipFile.CreateFromDirectory(文件夹目录, zip路径);//压缩文件夹
ZipFile.ExtractToDirectory(zip路径, 输出目录);//解压缩文件夹
——————————————————————————————
指定文件进行压缩,可进行覆盖
压缩
public static void 压缩文件(List<string> 所有文件, string 父目录, string 输出目录) {if (!Regex.IsMatch(父目录, @".*[/\\]$")) {//为了确认压缩目录内的相对路径父目录 += "\\";}using (FileStream fs = new FileStream(输出目录, FileMode.Create)) {using (ZipArchive ar = new ZipArchive(fs, ZipArchiveMode.Create)) {foreach (string file in 所有文件) {FileInfo info = new FileInfo(file);if (!new DirectoryInfo(父目录).FullName.StartsWith(info.Directory.FullName)) {throw new Exception("压缩文件必须处于指定的父目录下!");}ar.CreateEntryFromFile(info.FullName, info.FullName.Substring(父目录.Length));}}}
}
解压缩,文件夹不存在则创建,文件存在则覆盖
public static void 解压文件(string zipFile, string outPath) {if (!Regex.IsMatch(outPath, @".*[/\\]$")) {outPath += "\\";}using (FileStream fs = new FileStream(zipFile, FileMode.Open)) {using (ZipArchive zr = new ZipArchive(fs)) {foreach (var en in zr.Entries) {FileInfo path = new FileInfo(outPath + en.FullName);if (!path.Directory.Exists) {path.Directory.Create();}if (en.Name == "") {//是文件夹Directory.CreateDirectory(outPath + en.FullName);} else {en.ExtractToFile(outPath + en.FullName, true);}}}}
}