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();