一、压缩文件
public static void CompressionFile(string filePath, string zipPath,string zipName, List<string> filterExtenList = null)
{
try
{
using (var zip = File.Create(zipPath+zipName))
{
var option = new WriterOptions(CompressionType.Deflate)
{
ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding()
{
Default = Encoding.UTF8
}
};
using (var zipWriter = WriterFactory.Open(zip, ArchiveType.Zip, option))
{
if (Directory.Exists(filePath))
{
zipWriter.WriteAll(filePath, "*",
(path) => filterExtenList == null ? true : !filterExtenList.Any(d => Path.GetExtension(path).Contains(d, StringComparison.OrdinalIgnoreCase)), SearchOption.AllDirectories);
}
else if (File.Exists(filePath))
{
zipWriter.Write(Path.GetFileName(filePath), filePath);
}
}
}
}
catch (Exception ex)
{
LoggerUtil.Error("CompressionUtil:CompressionFile", ex);
}
}
二、解压文件
public static void DeCompressionFile(string zipPath, string zipName, string dirPath, string password = "")
{
if (!File.Exists(zipPath+zipName))
{
LoggerUtil.Info("zipPath压缩文件不存在");
}
Directory.CreateDirectory(dirPath);
try
{
using (Stream stream = File.OpenRead(zipPath+zipName))
{
var option = new ReaderOptions()
{
ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding()
{
Default = Encoding.UTF8
}
};
if (!string.IsNullOrWhiteSpace(password))
{
option.Password = password;
}
var reader = ReaderFactory.Open(stream, option);
while (reader.MoveToNextEntry())
{
if (reader.Entry.IsDirectory)
{
Directory.CreateDirectory(Path.Combine(dirPath, reader.Entry.Key));
}
else
{
var file = Path.Combine(dirPath, reader.Entry.Key);
Directory.CreateDirectory(Path.GetDirectoryName(file));
reader.WriteEntryToFile(file);
}
}
}
}
catch (Exception ex)
{
LoggerUtil.Error("CompressionUtil:DeCompressionFile", ex);
}
}
三、调用方式
List<string> list = new List<string>();
list.Add(".ini");
CompressionUtil.CompressionFile("D:\\DebugBase\\MonitorService", "D:\\Backups\\","MonitorService.zip", list);
CompressionUtil.DeCompressionFile("D:\\Backups\\","MonitorService.zip" "D:\\DebugBase\\MonitorService", null);