zoukankan      html  css  js  c++  java
  • .NET 使用Process调用7_zip解压文件

    对于我来说,注意用词!对于我!来说!市面上最好的文件解压缩软件就是7-zip,它不仅小而且相当强大。

    7Zip官网【https://www.7-zip.org/】

    7-zip支持的格式有

    • 解压缩: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM
    • 仅解压: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VMDK, WIM, XAR and Z.

    以下是使用代码,注意注释

    //要安装rx-main,否则就是用原生event处理
    using System;
    using System.Configuration;
    using System.Diagnostics;
    using System.IO;
    using System.Reactive.Linq;
    
    namespace _7ZipTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "7ZipInstaller\01.rar");
                //var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "7ZipInstaller\02.7z");
                //var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "7ZipInstaller\03.zip");
                var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "7ZipInstaller\04.rar");
                try
                {
                    Console.WriteLine("正在解压缩...
    ");
                    _7ZipHelper.UnZipFile(new FileInfo(filePath));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }            
                Console.Read();
            }
        }
        public class _7ZipHelper
        {
            /// <summary>
            /// 7Zip官网【https://www.7-zip.org/】下载的7z管理器安装程序
            /// </summary>
            private static string _7ZipExePath => ConfigurationManager.AppSettings[nameof(_7ZipExePath)];
            private static string _7UnZipPath => ConfigurationManager.AppSettings[nameof(_7UnZipPath)];
    
            /// <summary>
            /// 参数 【x】 从压缩文件中解压缩,包含目录结构 
            /// 解压缩c.7z到E:Program Files: 
            /// 7z x c.7z -oE:”Program Files” (-o表示输出目录,其与目录路径之间没有空格)这样解压包含下级目录名,
            /// 但不会在E:Program Files下新建一个c文件夹,
            /// 如果需要,就把输出目录设为E:Program Filesc,这样会自动创建文件夹c。
            /// </summary>
            /// <param name="fileInfo"></param>
            public static void UnZipFile(FileInfo fileInfo)
            {
                if (fileInfo.Exists)
                {
                    Stopwatch watch = new Stopwatch();
                    watch.Start();
                    Process process = new Process();
                    process.EnableRaisingEvents = true;
                    // 必须禁用操作系统外壳程序  
                    process.StartInfo.UseShellExecute = false;
                    process.StartInfo.CreateNoWindow = true;
                    process.StartInfo.RedirectStandardOutput = true;
    
                    process.StartInfo.FileName = _7ZipExePath;
                    process.StartInfo.Arguments = $@" x {fileInfo.FullName} -o{_7UnZipPath}{Path.GetFileNameWithoutExtension(fileInfo.Name)}";
                    process.Start();
    
                    // 获取命令行内容  
                    process.BeginOutputReadLine();
                    //响应OutputDataReceived事件
                    Observable.FromEventPattern<DataReceivedEventArgs>(process, nameof(process.OutputDataReceived))
                        .Where(t => !string.IsNullOrEmpty(t.EventArgs.Data))
                        .Subscribe(e =>
                        {
                            Console.WriteLine(e.EventArgs.Data);
                        });
                    //7zip退出后执行事件
                    Observable.FromEventPattern<EventArgs>(process, nameof(process.Exited))
                        .Subscribe(e =>
                        {
                            watch.Stop();
                            Console.WriteLine($"
    解压缩完成!耗时:{watch.ElapsedMilliseconds} (ms)");
                        });
                }
                else
                {
                    Console.WriteLine($"未找到文件:【{fileInfo.FullName}】");
                }
            }
        }
    }
    
    
    
  • 相关阅读:
    Oracle数据库不能使用索引的原因定位
    C语言中的strncmp
    C标准库函数
    C语言字符串函数大全
    Postgres性能检测
    test cert by python
    如何在C语言中巧用正则表达式
    北大软微一年ABCD
    C 语言字符数组的定义与初始化
    25个设计设计灵感的紫色网站案例
  • 原文地址:https://www.cnblogs.com/xuxuzhaozhao/p/10341212.html
Copyright © 2011-2022 走看看