一.下載SharpCompress庫

二.解壓縮
(1)不帶密碼
/// <summary>
/// 解壓縮(支持rar,zip)
/// </summary>
/// <param name="fromFilePath">待解壓文件全路徑</param>
/// <param name="outFileDirectory">解壓文件后目錄</param>
public static void Decompress(string fromFilePath, string outFileDirectory)
{
var archive = ArchiveFactory.Open(fromFilePath);
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
//Debug.WriteLine(entry.Key);
entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
(2)帶密碼
/// <summary>
/// 解壓縮加密的包(支持rar,zip)
/// </summary>
/// <param name="fromFilePath">待解壓文件全路徑</param>
/// <param name="outFileDirectory">解壓文件后目錄</param>
/// <param name="password">密碼</param>
public static void DecompressWithPwd(string fromFilePath, string outFileDirectory, string password)
{
using (var archive = ArchiveFactory.Open(fromFilePath, new ReaderOptions { Password = password }))
{
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
//Debug.WriteLine(entry.Key);
entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
}
三.壓縮
/// <summary>
/// 壓縮(zip格式)
/// </summary>
/// <param name="fromFileDirectory">待壓縮目錄</param>
/// <param name="outFilePath">壓縮后文全件路徑</param>
public static void ZipCompress(string fromFileDirectory, string outFilePath)
{
//解決中文亂碼問題
SharpCompress.Common.ArchiveEncoding ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding();
ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");
SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
options.ArchiveEncoding = ArchiveEncoding;
using (var archive = ZipArchive.Create())
{
archive.AddAllFromDirectory(fromFileDirectory);
using (var zip = File.OpenWrite(outFilePath))
archive.SaveTo(zip, options);
}
}
四.調用
//壓縮 string fromFileDirectory = @"C:\test\我是目錄"; string outFilePath = @"C:\壓縮包1.zip"; CompressHelper.ZipCompress(fromFileDirectory, outFilePath); //解壓縮 string fromFilePath = @"C:\壓縮包1.zip"; string outFileDirectory = @"C:\解壓目錄\壓縮包1"; CompressHelper.Decompress(fromFilePath, outFileDirectory);
五.中文亂碼問題
老版本直接加入下面一行代碼就可以了
SharpCompress.Common.ArchiveEncoding.Default = Encoding.GetEncoding ("utf-8");
但是我使用的是0.23.0版本,.ArchiveEncoding已經從靜態類改為普通類了,無法這樣調用
參考:https://github.com/adamhathcock/sharpcompress/issues/268

最后發現:ArchiveEncoding類是OptionsBase的屬性,而OptionsBase是WriterOptions的基類,ZipArchive的SaveTo方法帶WriterOptions參數,那就ok了
參考:
wiki:https://github.com/adamhathcock/sharpcompress/wiki/API-Examples
支持類型:https://github.com/adamhathcock/sharpcompress/wiki/Supported-Formats
