使用C#壓縮/解壓縮7-zip檔案

來源:互聯網
上載者:User

7-Zip 簡介

7-Zip 是一款號稱有著現今最高壓縮比的壓縮軟體,它不僅支援專屬的 7z 檔案格式,而且還支援各種其它壓縮檔格式,其中包括 ZIP, RAR, CAB, GZIP, BZIP2和 TAR 等等。此軟體壓縮的壓縮比要比普通 ZIP 檔案高 30-50% ,因此,它可以把 Zip 格式的檔案再壓縮 2-10% 。
7-Zip 主要特徵
更新了演算法來加大 7z 格式 的壓縮比
支援格式:
壓縮及解壓縮:7z、ZIP、GZIP、BZIP2 和 TAR
僅解壓縮:RAR、CAB、ISO、ARJ、LZH、CHM、WIM、Z、CPIO、RPM、DEB 和 NSIS
對於 ZIP 及 GZIP 格式,7-Zip 能提供比使用 PKZip 及 WinZip 高 2-10% 的壓縮比
7z 格式支援建立自釋放(SFX)壓縮檔案
整合 Windows 外殼擴充
強大的的檔案管理
強大的命令列版本
支援 FAR Manager 外掛程式
支援 69 種語言

C#中壓縮/解壓縮7-zip檔案的方法

1.控制台方式調用7z.exe檔案

public static void Unzip(DirectoryInfo DirecInfo)
{
if (DirectInfo.Exists)
{
foreach (FileInfo fileInfo in DirecInfo.GetFiles("*.zip"))
{
Process process = new Process();
process.StartInfo.FileName = @"C:\Program Files\7-zip\7z.exe";
process.StartInfo.Arguments =                         @" e C:\Directory\" + fileInfo.Name + @" -o C:\Directory";
process.Start();
}
}
}

 

2.根據壓縮演算法LZMA SDK
LZMA SDK裡麵包括了壓縮和解壓縮演算法的C#源碼(目前的版本是4.65)
: http://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/4.65/lzma465.tar.bz2/download
3.在.NET應用程式中使用7-Zip的壓縮/解壓縮功能 (作者 Abel Avram 譯者 趙劼 )
開發人員Eugene Sichkar建立了一系列7-Zip動態連結程式庫的C#介面,.NET應用程式中使用7-Zip的壓縮/解壓縮功能了。
據Eugene稱,該項目實現了以下介面:
  • IProgress - 基本進度的回調
  • IArchiveOpenCallback - 開啟壓縮包的回調
  • ICryptoGetTextPassword - 為壓縮提示密碼的回調
  • IArchiveExtractCallback - 對壓縮包進行解壓的回調
  • IArchiveOpenVolumeCallback - 開啟額外壓縮卷的回調
  • ISequentialInStream - 基本的唯讀資料流介面
  • ISequentialOutStream - 基本的唯寫資料流的介面
  • IInStream - 可以隨機讀取的輸入資料流介面
  • IOutStream - 輸出資料流介面
  • IInArchive - 主要壓縮介面

具體的使用方式可以參考源碼中樣本.

4.SevenZipSharp

markhor 建立了SevenZipSharp 項目,SevenZipSharp 是開源的,裡面實現了自解壓和壓縮所有7-ZIP支援的格式.它改進了7-Zip動態連結程式庫的C#介面的一些方法.

常用壓縮/解壓縮樣本(引自SevenZipSharp樣本檔案):

解壓縮檔案

using (SevenZipExtractor tmp = new SevenZipExtractor(@"d:\Temp\7z465_extra.7z"))
{
for (int i = 0; i < tmp.ArchiveFileData.Count; i++)
{
tmp.ExtractFiles(@"d:\temp\!Пусто\", tmp.ArchiveFileData[i].Index);
}
//tmp.ExtractFiles(@"d:\temp\!Пусто\", 1, 3, 5); 
}
 
 

分卷壓縮

SevenZipExtractor.SetLibraryPath(@"d:\Work\Misc\7zip\9.04\CPP\"+                                  7zip\Bundles\Format7zF\7z.dll");
using (SevenZipExtractor tmp = new SevenZipExtractor(@"d:\Temp\SevenZip.7z.001"))
{
tmp.ExtractArchive(@"d:\Temp\!Пусто");
}

壓縮檔

SevenZipCompressor tmp = new SevenZipCompressor();
tmp.CompressFiles(@"d:\Temp\arch.7z", @"d:\Temp\log.txt");
tmp.CompressDirectory(@"c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\1033",                  @"D:\Temp\arch.7z");

壓縮ZIP檔案

SevenZipCompressor tmp = new SevenZipCompressor();
tmp.ArchiveFormat = OutArchiveFormat.Zip;
tmp.CompressFiles(@"d:\Temp\arch.zip", @"d:\Temp\gpl.txt", @"d:\Temp\ru_office.txt");

多線程解壓縮

Thread t1 = new Thread(() =>
{
using (SevenZipExtractor tmp = new SevenZipExtractor(@"D:\Temp\7z465_extra.7z"))
{
tmp.FileExtractionStarted += new EventHandler<FileInfoEventArgs>((s, e) =>
{
Console.WriteLine(String.Format("[{0}%] {1}",
e.PercentDone, e.FileInfo.FileName));
});
tmp.ExtractionFinished +=                new EventHandler((s, e) => { Console.WriteLine("Finished!"); });
tmp.ExtractArchive(@"D:\Temp\t1");
}
});
Thread t2 = new Thread(() =>
{
using (SevenZipExtractor tmp = new SevenZipExtractor(@"D:\Temp\7z465_extra.7z"))
{
tmp.FileExtractionStarted += new EventHandler<FileInfoEventArgs>((s, e) =>
{
Console.WriteLine(String.Format("[{0}%] {1}",
e.PercentDone, e.FileInfo.FileName));
});
tmp.ExtractionFinished +=                 new EventHandler((s, e) => { Console.WriteLine("Finished!"); });
tmp.ExtractArchive(@"D:\Temp\t2");
}
});
t1.Start();
t2.Start();
t1.Join();
t2.Join();

多線程壓縮

Thread t1 = new Thread(() =>
{
SevenZipCompressor tmp = new SevenZipCompressor();
tmp.FileCompressionStarted += new EventHandler<FileNameEventArgs>((s, e) =>
{
Console.WriteLine(String.Format("[{0}%] {1}",
e.PercentDone, e.FileName));
});
tmp.CompressDirectory(@"D:\Temp\t1", @"D:\Temp\arch1.7z");
});
Thread t2 = new Thread(() =>
{
SevenZipCompressor tmp = new SevenZipCompressor();
tmp.FileCompressionStarted += new EventHandler<FileNameEventArgs>((s, e) =>
{
Console.WriteLine(String.Format("[{0}%] {1}",
e.PercentDone, e.FileName));
});
tmp.CompressDirectory(@"D:\Temp\t2", @"D:\Temp\arch2.7z");
});
t1.Start();
t2.Start();
t1.Join();
t2.Join();
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.