net/net core 压缩和解压文件类—完美支持Linux
2023-06-13 09:11:06 时间
/// <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);
}
}
}
相关文章
- 查看Linux系统中大文件的方法(查看linux大文件)
- Linux下的CAP文件管理(cap文件linux)
- Linux下解决无法删除文件的方法(linux无法删除文件)
- Linux快速删除文件行的方法(linux删除行)
- 查看Linux电脑配置:快速又容易(查看linux电脑配置)
- 成都:Linux技术专业招聘(成都linux招聘)
- 龙芯:开创Linux新时代(龙芯linux)
- Linux下新建用户并配置权限(linux新建用户并授权)
- Linux 文件操作完全指南(linux文件操作大全)
- 网络设置虚拟机Linux: 无线网络搭建指南(虚拟机linux无线)
- 利用Linux镜像ISO安装系统(linux镜像iso文件)
- Linux世界的分支之光(linux的分支)
- Linux的新分支:开放无限可能(linux的分支)
- 利用 Linux 重定向把输出定向到新的文件(linux重定向输出)
- 西安:LINUX运维的领航之地(linux运维西安)
- Linux 批量文件重命名指南(批量重命名linux)
- Linux分支:从经典到现代(linux的分支)
- Linux文件隐藏:简单方法(linux如何隐藏文件)
- Linux系统下文件权限管理精细化(linux系统文件权限)
- 配置Linux: 高级文件权限设置777(linux设置777权限)
- 数Linux下变更文件句柄数的步骤(linux修改文件句柄)
- Linux下批量mv文件的一种简洁方法(linux批量mv)
- Linux中的PID文件管理(linux pid 文件)
- 如何在Linux系统下运行Jar文件(linux执行jar文件)
- C语言编程开发Linux系统(clinux编程)