依赖:.NET Framework 4.5及以上,引用 - 添加引用 - 程序集
System.IO.Compression
System.IO.Compression.FileSystem
针对文件夹的最简单的压缩与解压缩
1、目录必须存在
2、无法覆盖文件
public static void DoZipFile(List<string> AllFiles, string FileDir, string OutputDir)
{
if (!Regex.IsMatch(FileDir, @".*[/\\]$"))
{
FileDir += "\\";
}
using (FileStream fs = new FileStream(OutputDir, FileMode.Create))
{
using (ZipArchive ar = new ZipArchive(fs, ZipArchiveMode.Create))
{
foreach (string file in AllFiles)
{
FileInfo info = new FileInfo(file);
if(!new DirectoryInfo(FileDir).FullName.StartsWith(info.Directory.FullName))
{
throw new Exception("Compress file must exist in the specific directory");
}
ar.CreateEntryFromFile(info.FullName, info.FullName.Substring(FileDir.Length));
}
}
}
}
public static void UnZipFile(string ZipFile, string OutputPath)
{
if (!Regex.IsMatch(OutputPath, @".*[/\\]$"))
{
OutputPath += "\\";
}
using (FileStream fs = new FileStream(ZipFile, FileMode.Open))
{
using (ZipArchive zr = new ZipArchive(fs))
{
foreach (var en in zr.Entries)
{
FileInfo path = new FileInfo(OutputPath + en.FullName);
if(!path.Directory.Exists)
{
path.Directory.Create();
}
if(en.Name == "") //是文件夹
{
Directory.CreateDirectory(OutputPath + en.FullName);
}
else
{
en.ExtractToFile(OutputPath + en.FullName, true);
}
}
}
}
}