net/net core 压缩和解压文件类—完美支持Linux
跟着阿笨一起玩NET
发布
于
2022-09-26 16:03:17
发布
于
2022-09-26 16:03:17
文章被收录于专栏:
跟着阿笨一起玩NET
/// <summary>
/// 文件压缩类
/// </summary>
public class ZipHelper
/// <summary>
/// 单文件压缩成ZIP
/// </summary>
/// <param name="fileSource">源文件路径</param>
/// <param name="fileOut">ZIP文件路径</param>
/// <param name="fileName">ZIP文件名:相对路径</param>
/// <returns></returns>
public static void SimpleFileZip(string fileSource, string fileOut, string fileName)
using (FileStream zipFileToOpen = new FileStream(fileOut, FileMode.OpenOrCreate))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Update))
fileName = fileName.Trim(Path.DirectorySeparatorChar);
ZipFile(fileSource, fileName, archive);
/// <summary>
/// 多文件压缩成ZIP
/// </summary>
/// <param name="fileSource">源文件路径</param>
/// <param name="fileOut">ZIP文件路径</param>
/// <param name="fileName">ZIP文件名</param>
/// <returns></returns>
public static void FilesZip(List<string> fileSources, string fileOut)
using (FileStream zipFileToOpen = new FileStream(fileOut, FileMode.OpenOrCreate))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Update))
foreach (var file in fileSources)
string fileName = file.Replace(AppConsts.ServerUpdateFile + Path.DirectorySeparatorChar, "");
ZipFile(file, fileName, archive);
/// <summary>
/// 压缩指定文件夹
/// </summary>
/// <param name="sourceDirectory"></param>
/// <param name="fileOut"></param>
public static void DirectoryZip(string sourceDirectory, string fileOut)
string[] allFiles = Directory.GetFiles(sourceDirectory, "", SearchOption.AllDirectories);
using (FileStream zipFileToOpen = new FileStream(fileOut, FileMode.OpenOrCreate))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Update))
foreach (var file in allFiles)
//获取压缩文件相对目录
string fileName = file.Replace(sourceDirectory + Path.DirectorySeparatorChar, "");
ZipFile(file, fileName, archive);
/// <summary>
/// 解压文件到指定目录
/// </summary>
/// <param name="upZipDirPath"></param>
/// <param name="zipPath"></param>
public static void UnZip(string upZipDirPath, string zipPath)
if (!Directory.Exists(upZipDirPath))
Directory.CreateDirectory(upZipDirPath);
using (FileStream zipFileToOpen = new FileStream(zipPath, FileMode.Open))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read))
archive.ExtractToDirectory(upZipDirPath);
/// <summary>
/// 生成压缩文件
/// </summary>
/// <param name="fileSource">源文件</param>
/// <param name="fileName">压缩文件相对目录</param>
/// <param name="archive">压缩文件包</param>
private static void ZipFile(string fileSource, string fileName, ZipArchive archive)
ZipArchiveEntry readMeEntry = archive.CreateEntry(fileName);
readMeEntry.LastWriteTime = File.GetLastWriteTime(fileSource);
using (Stream stream = readMeEntry.Open())