C#在Windows上调用7-zip实现压缩文件

 更新时间:2023年10月27日 14:20:45   作者:先生沉默先  
这篇文章主要为大家详细介绍了C#如何在Windows上调用7-zip实现压缩文件,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以学习一下

使用C#在Windows上调用7-zip压缩文件

  • 可以设置输出文件的路径也可以留空,留空则会在压缩文件创建一个同名的.压缩包
  • 可以设置压缩包的密码
  • 可以设置压缩包的加密方式(ASE-256),可以使用LZMA但是加密码会报错
  • 可以设置压缩包的格式(zip),可以使用7z但是加密码会报错
  • 添加了密码最大长度的限制(98个字符,7zip限制的)
  • 在7-ZIP的图形界面可以选择7z格式压缩可以输入中文的密码

示例代码

using System;
using System.Diagnostics;

namespace 文件的压缩
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("你好,接下来开始压缩文件");

            ZipsHelper.CompressedInformation compressedInformation = new ZipsHelper.CompressedInformation(
               @"E:\压缩文件测试\压缩文件_Orgion\V_1696602827.txt",
               "",
                "",
               ZipsHelper.CompressedFileType.Zip,
               ZipsHelper.CompressedPackageEncryptionMode.AES256);
            //压缩  E:\压缩文件测试\压缩文件_Orgion\V1696602827.txt
            //到     E:\压缩文件测试\压缩文件_Orgion\V1696602827.zip

            ZipsHelper.DoCompressedFile(compressedInformation);

            Console.ReadKey();

        }
    }

    /// <summary>
    /// zip文件压缩
    /// </summary>
    public class ZipsHelper
    {

        /// <summary>
        /// 压缩文件
        /// </summary>
        public static void DoCompressedFile(CompressedInformation compressedInformation)
        {
            // 设置7-Zip可执行文件的路径,根据你的安装路径进行修改
            string sevenZipExePath = @"C:\Program Files\7-Zip\7z.exe";
            if (!System.IO.File.Exists(sevenZipExePath))
            {
                Console.WriteLine($"未能找到7z.exe ,请检查路径,当前路径是:{sevenZipExePath}");
                return;
            }
           if (compressedInformation.Password.Length > 98)
            {
                Console.WriteLine($"压缩取消,密码长度过长,最大长度是98,当前长度是:{compressedInformation.Password.Length}。");
                return;
            }
            string encryptionMethod;//压缩包的加密方式
            if (compressedInformation.CompressedPackageEncryptionMode == CompressedPackageEncryptionMode.AES256)
            {
                encryptionMethod = "-mem=AES256";
            }
            //else if (compressedInformation.CompressedPackageEncryptionMode == CompressedPackageEncryptionMode.LZMA)
            //{
            //encryptionMethod = "-mhe=on -m0=BCJ2 -m1=LZMA2 -m2=LZMA2 -m3=LZMA2 -mb0:1 -mb0s1:2 -mb0s2:3";
            //}
            else
            {
                encryptionMethod = "-mem=AES256";
            }

            string format;//设置压缩包的格式
            if (compressedInformation.CompressedFileType == CompressedFileType.Zip)
            {
                compressedInformation.CompressedFilePath += ".zip";//添加压缩包的文件后缀
                format = "zip";
            }
            else
            {
                format = "7z";
            }

            string arguments;//压缩的参数
            //构建7-Zip命令行参数 
            if (compressedInformation.Password == "")//当选择了压缩的加密方式但是密码为空的时候不能压缩
            {
                arguments = $"a -t{format} \"{compressedInformation.CompressedFilePath}\" \"{compressedInformation.FilePathToCompress}\"";
            }
            else
            {
                arguments = $"a -t{format} \"{compressedInformation.CompressedFilePath}\" \"{compressedInformation.FilePathToCompress}\" {encryptionMethod} -p{compressedInformation.Password}";
            }


            Console.WriteLine(arguments);

            // 创建一个新的进程来运行7-Zip
            Process process = new Process();
            process.StartInfo.FileName = sevenZipExePath;
            process.StartInfo.Arguments = arguments;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;

            // 启动7-Zip进程并等待其完成
            process.Start();
            process.WaitForExit();

            // 处理输出结果
            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd();

            if (string.IsNullOrEmpty(error))
            {
                Console.WriteLine("文件压缩成功!");
            }
            else
            {
                Console.WriteLine("文件压缩失败,错误信息:" + error);
            }

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine(output);


        }


        /// <summary>
        /// 压缩包类型
        /// </summary>
        public enum CompressedFileType
        {
            Zip = 1,
            //  _7Z = 2

        }

        /// <summary>
        /// 压缩包加密格式
        /// </summary>
        public enum CompressedPackageEncryptionMode
        {
            AES256,
            //  LZMA,
        }


        public class CompressedInformation
        {
            /// <summary>
            /// 压缩文件路径
            /// </summary>
            private string filePathToCompress;

            /// <summary>
            /// 输出文件路径
            /// </summary>
            private string compressedFilePath;

            /// <summary>
            /// 密码
            /// </summary>
            private string password;

            /// <summary>
            /// 压缩包类型
            /// </summary>
            private CompressedFileType compressedFileType;


            /// <summary>
            ///  压缩包加密格式
            /// </summary>
            private CompressedPackageEncryptionMode compressedPackageEncryptionMode;

            public string FilePathToCompress { get => filePathToCompress; set => filePathToCompress = value; }
            public string CompressedFilePath { get => compressedFilePath; set => compressedFilePath = value; }
            public string Password { get => password; set => password = value; }
            public CompressedFileType CompressedFileType { get => compressedFileType; set => compressedFileType = value; }
            public CompressedPackageEncryptionMode CompressedPackageEncryptionMode { get => compressedPackageEncryptionMode; set => compressedPackageEncryptionMode = value; }

            /// <summary>
            /// 压缩命令参数
            /// </summary>
            /// <param name="filePathToCompress">压缩文件路径</param>
            /// <param name="compressedFilePath">压缩包输出路径</param>
            /// <param name="password">密码</param>
            /// <param name="compressedFileType">压缩包格式</param>
            /// <param name="compressedPackageEncryptionMode">压缩包加密方式</param>
            public CompressedInformation(string filePathToCompress,
                string compressedFilePath = "",
                string password = "",
                CompressedFileType compressedFileType = CompressedFileType.Zip,
                CompressedPackageEncryptionMode compressedPackageEncryptionMode = CompressedPackageEncryptionMode.AES256)
            {
                this.FilePathToCompress = filePathToCompress;
                this.CompressedFilePath = compressedFilePath;
                this.Password = password;
                this.CompressedFileType = compressedFileType;
                this.CompressedPackageEncryptionMode = compressedPackageEncryptionMode;

                if (compressedFilePath == "")
                {
                    GetFileNameAndExtension(filePathToCompress, out compressedFilePath);
                    this.CompressedFilePath = compressedFilePath;
                }
            }

            public static void GetFileNameAndExtension(string filePath, out string pathWithoutExtension)
            {
                pathWithoutExtension = System.IO.Path.ChangeExtension(filePath, null); // 去除文件后缀
            }


        }

    }

}

到此这篇关于C#在Windows上调用7-zip实现压缩文件的文章就介绍到这了,更多相关C#压缩文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 线程安全详解

    C# 线程安全详解

    这篇文章主要介绍了c# 线程安全的用法原理及使用示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • 使用C#和SQL Server实现自动清理功能的完整方案

    使用C#和SQL Server实现自动清理功能的完整方案

    在现代软件开发中,数据管理是一个至关重要的环节,随着时间的推移,数据库中会积累大量过期或冗余的数据,这些数据不仅占用存储空间,还会影响系统性能,本文将详细介绍如何使用C#和SQL Server构建一个功能完善的自动清理系统,需要的朋友可以参考下
    2026-01-01
  • Unity实现批量Build打包详解

    Unity实现批量Build打包详解

    一般来讲如果项目是PC或Android、IOS端不会有批量Build打包这样的需求,但如果项目是WebGL端可能会遇到这样的需求。本文主要为大家介绍Unity中如何实现Build批量打包的,需要的朋友可以参考一下
    2021-12-12
  • C#读写文本文件的方法

    C#读写文本文件的方法

    这篇文章主要介绍了C#读写文本文件的方法,实例分析了C#操作文本文件的原理与实现技巧,需要的朋友可以参考下
    2015-06-06
  • C#自定义控件添加右键菜单的方法

    C#自定义控件添加右键菜单的方法

    这篇文章主要介绍了C#自定义控件添加右键菜单的方法,本文用到control控件,专门自定义右键菜单,下面小编给大家整理下,有需要的小伙伴可以来参考下
    2015-08-08
  • C# 调用腾讯即时通信 IM的示例

    C# 调用腾讯即时通信 IM的示例

    这篇文章主要介绍了C# 调用腾讯即时通信 IM的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-11-11
  • 用C#操纵IIS(代码)

    用C#操纵IIS(代码)

    用C#操纵IIS(代码)...
    2007-03-03
  • C#操作Excel相关方法总结

    C#操作Excel相关方法总结

    这篇文章主要介绍了C#操作Excel相关方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 深入解析c#中枚举类型的定义与使用

    深入解析c#中枚举类型的定义与使用

    以下是对c#中枚举类型的定义与使用进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • 使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能

    使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能

    这篇文章主要为大家介绍了使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论