zoukankan      html  css  js  c++  java
  • SharpCompress压缩和解压缩,并解决压缩的中文乱码问题

    一.下载SharpCompress库

    二.解压缩

    (1)不带密码

            /// <summary>
            /// 解压缩(支持rar,zip)
            /// </summary>
            /// <param name="fromFilePath">待解压文件全路径</param>
            /// <param name="outFileDirectory">解压文件后目录</param>
            public static void Decompress(string fromFilePath, string outFileDirectory)
            {
                var archive = ArchiveFactory.Open(fromFilePath);
                foreach (var entry in archive.Entries)
                {
                    if (!entry.IsDirectory)
                    {
                        //Debug.WriteLine(entry.Key);
                        entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
                    }
                }
            }
    

    (2)带密码

            /// <summary>
            /// 解压缩加密的包(支持rar,zip)
            /// </summary>
            /// <param name="fromFilePath">待解压文件全路径</param>
            /// <param name="outFileDirectory">解压文件后目录</param>
            /// <param name="password">密码</param>
            public static void DecompressWithPwd(string fromFilePath, string outFileDirectory, string password)
            {
                using (var archive = ArchiveFactory.Open(fromFilePath, new ReaderOptions { Password = password }))
                {
                    foreach (var entry in archive.Entries)
                    {
                        if (!entry.IsDirectory)
                        {
                            //Debug.WriteLine(entry.Key);
                            entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
                        }
                    }
                }
            }

    三.压缩

     /// <summary>
            /// 压缩(zip格式)
            /// </summary>
            /// <param name="fromFileDirectory">待压缩目录</param>
            /// <param name="outFilePath">压缩后文全件路径</param>
            public static void ZipCompress(string fromFileDirectory, string outFilePath)
            {
                //解决中文乱码问题
                SharpCompress.Common.ArchiveEncoding ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding();
                ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");
                SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
                options.ArchiveEncoding = ArchiveEncoding;
    
                using (var archive = ZipArchive.Create())
                {
                    archive.AddAllFromDirectory(fromFileDirectory);
                    using (var zip = File.OpenWrite(outFilePath))
                        archive.SaveTo(zip, options);
                }
            }
    

      

    四.调用

    //压缩
    string fromFileDirectory = @"C:	est我是目录";
    string outFilePath = @"C:压缩包1.zip";
    CompressHelper.ZipCompress(fromFileDirectory, outFilePath);
    
    //解压缩
    string fromFilePath = @"C:压缩包1.zip";
    string outFileDirectory = @"C:解压目录压缩包1";
    CompressHelper.Decompress(fromFilePath, outFileDirectory);
    

      

    五.中文乱码问题

    老版本直接加入下面一行代码就可以了

    SharpCompress.Common.ArchiveEncoding.Default = Encoding.GetEncoding ("utf-8");

    但是我使用的是0.23.0版本,.ArchiveEncoding已经从静态类改为普通类了,无法这样调用

    参考:https://github.com/adamhathcock/sharpcompress/issues/268

     最后发现:ArchiveEncoding类是OptionsBase的属性,而OptionsBase是WriterOptions的基类,ZipArchive的SaveTo方法带WriterOptions参数,那就ok了

    参考:

    wiki:https://github.com/adamhathcock/sharpcompress/wiki/API-Examples

    支持类型:https://github.com/adamhathcock/sharpcompress/wiki/Supported-Formats

  • 相关阅读:
    aspnet自定义控件Treeview基本用法
    .net4 wpf App 使用log4net 错误:The type or namespace name 'log4net' could not be found (are you missing a using directive or an assembly reference?)
    asp_UpdatePanel PostBack返回后执行Javascript
    JqueryUI dialog model和asp_UpdatePanel 例子
    Asp.net中使用mshtml
    Windows 2008 R2使用WLAN
    AJAXToolkit_ ModalPopupExtender弹出窗中 使用分页方法
    Ajax.BeginForm MVC3 使用
    WPF错误 Set connectionId threw an exception
    高亮显示当前行
  • 原文地址:https://www.cnblogs.com/yaosj/p/10573571.html
Copyright © 2011-2022 走看看