zoukankan      html  css  js  c++  java
  • 【转】使用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."。
     
  • 相关阅读:
    北京除了木樨园哪里有卖布料的?要高级布料,不要那种便宜的小摊。
    郭培_百度百科
    木樨园批发市场淘布归来
    九头身美女_百度百科
    「花田对」CSDN程序员专场——谁来拯救技术宅!_豆瓣
    时间囊咖啡馆免费提供小型活动场地_豆瓣
    北京的布料市场
    适合入门自学服装裁剪滴书(更新ing)
    不说技术~2016-07-02我们是幸福的一家人
    插件~使用ECharts动态在地图上标识点~动态添加和删除标识点
  • 原文地址:https://www.cnblogs.com/longlongogo/p/7761634.html
Copyright © 2011-2022 走看看