using System;
using System.Text;
using Ionic.Zip;
using System.IO;
namespace Ionic
{
public static class ZipHelper
{
static void Main()
{
string zipPath = @"D:\test.zip";
string outPath = @"D:\1\";
ZipHelper.UnZip(zipPath, outPath);//解压
}
public static void UnZip(string zipPath, string outPath)
{
try
{
using (ZipFile zip = ZipFile.Read(zipPath))
{
foreach (ZipEntry entry in zip)
{
//Extract解压zip文件包的方法,参数是保存解压后文件的路基
entry.Extract(outPath, ExtractExistingFileAction.OverwriteSilently);
}
}
}
catch (Exception ex)
{
File.WriteAllText(System.Web.HttpContext.Current.Server.MapPath("/1.txt"), ex.Message + "\r\n" + ex.StackTrace);
}
}
/// <summary>
/// 递归子目录时调用
/// ZipHelper.Zip(files, path + model.CName + "/" + siteid + ".zip", path + model.CName + "/");
/// ZipHelper.ZipDir( path + model.CName + "/" + siteid + ".zip", path + model.CName + "/", path + model.CName + "/");
/// </summary>
/// <param name="savefileName">要保存的文件名</param>
/// <param name="childPath">要遍历的目录</param>
/// <param name="startPath">压缩包起始目录结尾必须反斜杠</param>
public static void ZipDir(string savefileName, string childPath, string startPath)
{
DirectoryInfo di = new DirectoryInfo(childPath);
if (di.GetDirectories().Length > 0) //有子目录
{
foreach (DirectoryInfo dirs in di.GetDirectories())
{
string[] n = Directory.GetFiles(dirs.FullName, "*");
Zip(n, savefileName, startPath);
ZipDir(savefileName, dirs.FullName, startPath);
}
}
}
/// <summary>
/// 压缩zip
/// </summary>
/// <param name="fileToZips">文件路径集合</param>
/// <param name="zipedFile">想要压成zip的文件名</param>
/// <param name="fileDirStart">文件夹起始目录结尾必须反斜杠</param>
public static void Zip(string[] fileToZips, string zipedFile, string fileDirStart)
{
using (ZipFile zip = new ZipFile(zipedFile, Encoding.UTF8))
{
foreach (string fileToZip in fileToZips)
{
string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\\", StringComparison.Ordinal) + 1);
zip.AddFile(fileToZip, fileToZip.Replace(fileDirStart, "").Replace(fileName, ""));
//zip.AddFile(fileToZip, fileToZip.Replace(fileDirStart, "").Replace(fileName, ""));
//using (var fs = new FileStream(fileToZip, FileMode.Open, FileAccess.ReadWrite))
//{
// var buffer = new byte[fs.Length];
// fs.Read(buffer, 0, buffer.Length);
// string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\\", StringComparison.Ordinal) + 1);
// zip.AddEntry(fileName, buffer);
//}
}
zip.Save();
}
}
public static void ZipOneFile(string from, string zipedFile, string to)
{
using (ZipFile zip = new ZipFile(zipedFile, Encoding.UTF8))
{
zip.AddFile(from, to);
zip.Save();
}
}
}
}
已经可以使用了,但还需学习。