代码语言:javascript复制
/// <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);
}
}
}