net/net core 压缩和解压文件类—完美支持Linux
/// <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())
{
byte[] bytes = File.ReadAllBytes(fileSource);
stream.Write(bytes, 0, bytes.Length);
}
}
}
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET

浙公网安备 33010602011771号