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


SevenZipSharp – Release: SevenZipSharp 0.58
http://sevenzipsharp.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32422#DownloadId=81930



VC遍历文件夹下所有文件和文件夹 – 流云の剑舞秋风 – 博客园
http://www.cnblogs.com/yjm0105/archive/2005/06/22/179353.html
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)    return;
  
    while(TRUE)
    {
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if(FindFileData.cFileName[0]!=’.')
            {
                strcpy(szFile,lpPath);
                strcat(szFile,”\\”);
                strcat(szFile,FindFileData.cFileName);
                find(szFile);
            }
        }
        else
        {
            cout << FindFileData.cFileName;
        }
        if(!FindNextFile(hFind,&FindFileData))    break;
    }
    FindClose(hFind);


VC遍历文件夹下所有文件和文件夹 – 流云の剑舞秋风 – 博客园
http://www.cnblogs.com/yjm0105/archive/2005/06/22/179353.html



C语言帝国: VC 遍历指定目录下的文件
http://www.vcgood.com/forum_posts.asp?TID=2261&PN=1



如何用C实现遍历文件夹? — 编程爱好者论坛存档帖
http://www.programfan.com/club/showpost.asp?id=18098



Windows API一日一练(58)FindFirstFile和FindNextFile函数 – 大坡3D软件开发 – CSDN博客
http://blog.csdn.net/caimouse/archive/2007/10/25/1844006.aspx



 

历史博文

标签:, ,
十一月 9, 2009 at 3:45 上午 by yippee 43 次
Category: Info
Tags: , ,