【转】使用SevenZipSharp压缩、解压文件

引用

下载之后引用“SevenZipSharp.dll”至项目中,然后将“7z.dll”放到bin目录下,或者这样引用:SevenZipCompressor.SetLibraryPath("c:\\7z.dll");//引用7Z.dll

因为SevenZipSharp本身无法独立工作,需要使用7z.dll来配合工作。

class Program  
    {  
        static void Main(string[] args)  
        {  
            // 指定7z动态库文件路径,默认是"7z.dll"  
            SevenZipBase.SetLibraryPath("7za.dll");  
  
            var compressor = new SevenZipCompressor();  
            // 可以在构造时指定临时文件夹  
            //var compressor = new SevenZipCompressor("Temp");  
  
            // 打印临时文件夹路径  
            Console.WriteLine(compressor.TempFolderPath);  
  
            // 设置压缩等级  
            compressor.CompressionLevel = CompressionLevel.Normal;  
  
            // 指定压缩包格式,默认为7z。  
            // 如果使用的7za.dll则只能使用7z格式。  
            compressor.ArchiveFormat = OutArchiveFormat.SevenZip;  
  
            // 是否保持目录结构,默认为true。  
            compressor.DirectoryStructure = true;  
  
            // 是否包含空目录,默认true。  
            compressor.IncludeEmptyDirectories = true;  
  
            // 压缩目录时是否使用顶层目录,默认false  
            compressor.PreserveDirectoryRoot = false;  
  
            // 加密7z头,默认false  
            compressor.EncryptHeaders = false;  
  
            // 文件加密算法  
            compressor.ZipEncryptionMethod = ZipEncryptionMethod.ZipCrypto;  
  
            // 尽快压缩(不会触发*Started事件,仅触发*Finished事件)  
            compressor.FastCompression = false;  
  
            // 单个文件开始压缩  
            compressor.FileCompressionStarted += (sender, eventArgs) =>  
            {  
                Console.WriteLine($"正在压缩:{eventArgs.FileName}");  
                Console.WriteLine($"进度:{eventArgs.PercentDone}%");  
            };  
  
            // 单个文件压缩完成时  
            compressor.FileCompressionFinished += (sender, eventArgs) =>  
            {  
                Console.WriteLine("FileCompressionFinished");  
            };  
              
            compressor.Compressing += (sender, eventArgs) =>  
            {  
                Console.WriteLine(eventArgs.PercentDelta);  
                Console.WriteLine(eventArgs.PercentDone);  
            };  
  
            // 压缩完成  
            compressor.CompressionFinished += (sender, eventArgs) =>  
            {  
                Console.WriteLine("CompressionFinished");  
            };  
  
            // 添加文件  
            var baseDir = AppDomain.CurrentDomain.BaseDirectory;  
            var files = new string[] {$"{baseDir}123.txt", $"{baseDir}456.txt"};  
            compressor.CompressFiles("Files.7z", files);  
  
            // 添加目录下的所有文件  
            compressor.CompressDirectory($"{baseDir}Dir", "Dir.7z");  
  
            Console.ReadKey();  
        }  
    } 

解压缩

class Program  
    {  
        static void Main(string[] args)  
        {  
            // 指定7z动态库文件路径,默认是"7z.dll"  
            SevenZipBase.SetLibraryPath("7za.dll");  
  
            var extractor = new SevenZipExtractor("Dir.7z");  
  
            extractor.Extracting += (sender, eventArgs) =>  
            {  
                Console.WriteLine("OnExtracting");  
            };  
  
            // 文件数量(文件夹也算)  
            Console.WriteLine(extractor.FilesCount);  
  
            // 压缩包字节数  
            Console.WriteLine(extractor.PackedSize);  
  
            // 压缩文件属性  
            foreach (var fileProp in extractor.ArchiveProperties)  
            {  
                Console.WriteLine(fileProp.ToString());  
            }  
  
            // 遍历文件名  
            foreach (var fileName in extractor.ArchiveFileNames)  
            {  
                Console.WriteLine(fileName);  
            }  
  
            // 遍历文件数据  
            foreach (var fileData in extractor.ArchiveFileData)  
            {  
                Console.WriteLine(fileData.ToString());  
            }  
  
            // 是否使用的固实压缩  
            Console.WriteLine(extractor.IsSolid);  
  
            // 解压后的大小  
            Console.WriteLine(extractor.UnpackedSize);  
  
            extractor.ExtractArchive("Unpack");  
  
            Console.ReadKey();  
        }  
    }  

注意事项

C#工程的默认目标平台是Any CPU,也就是根据系统决定程序是x86还是x64,所以在设置7z.dll的时候要注意使用架构相同的dll文件,否则你会收到一个错误提示"Can not load 7-zip library or internal COM error! Message: DLL file does not exist."。
 
posted @ 2017-10-31 15:09  周见仁  阅读(4750)  评论(0编辑  收藏  举报