c#使用SharpZipLib进行压缩和解压缩操作

需求场景: 每天下班时都要进行对N个文件目录进行带密码压缩操作并且删除目录,第二天上班又要重新解压然后使用。

创建项目后使用Nuget安装SharpZipLib扩展

在这里插入图片描述

开始写代码

ZipHelper.cs

using ICSharpCode.SharpZipLib.Zip;


namespace ScheduledOperation
{
    
    
   /// <summary>   
   /// 适用与ZIP压缩   
   /// </summary>   
   public class ZipHelper
   {
    
    


       /// <summary>
       /// 压缩文件以及目录
       /// </summary>
       /// <param name="targetDir">要压缩的文件目录</param>
       /// <param name="zipFileName">压缩后的文件名</param>
       /// <param name="password">密码</param>
       /// <returns>True or False</returns>
       public static bool Fastzip(string targetDir, string zipFileName, string password = "你的密码")
       {
    
    
           bool result = true;
           try
           {
    
    
               bool recurse = true;  // 通过递归目录结构包括所有文件
               string filter = null; // 不设置过滤文件
               FastZip fastZip = new FastZip();
               fastZip.Password = password; //设置密码
               fastZip.CreateEmptyDirectories = true;
               fastZip.CreateZip(zipFileName, targetDir, recurse, filter);
           }
           catch
           {
    
    
               result = false;
           }

           return result;
       }

       /// <summary>
       /// 解压缩文件
       /// </summary>
       /// <param name="zipFileName">压缩后的文件名</param>
       /// <param name="targetDir">要解压缩的文件目录</param>
       /// <param name="password">密码</param>
       /// <returns>True or False</returns>
       public static bool FastUnzip(string zipFileName, string targetDir, string password = "你的密码")
       {
    
    
           bool result = true;

           if (!File.Exists(zipFileName))
               return false;

           if (!Directory.Exists(targetDir))
               Directory.CreateDirectory(targetDir);

           FastZip fastzip = new FastZip();
           fastzip.Password = password;

           string fileFilter = null;

           fastzip.ExtractZip(zipFileName, targetDir, fileFilter);

           return result;
       }

   }

}

Program.cs


using System;

namespace ScheduledOperation
{
    
    

    class Program
    {
    
    
  
        //定义全局code list变量
        public static List<string> clist = new List<string>();
        public static string password = "你的密码";
     
        static void Main(string[] args)
        {
    
    
            //获取当前目录
            string path1 = System.Environment.CurrentDirectory;

            var targetpath = path1 + @"\sources.txt";
 
            clist =codelist(targetpath);
 
            if (args != null && args.Length > 0)
            {
    
    
                if (args[0] == "zip")
                {
    
    

                    ZipWork(clist);

                }
                else if (args[0] == "unzip")
                {
    
    
                    UnZipWork(clist);
                }

            }
            else
            {
    
    
                ZipWork(clist);
            }
 
        }

        /// <summary>
        ///  压缩文件以及目录
        /// </summary>
        /// <param name="codelist">文件路径List</param>
        public static void ZipWork(List<string> codelist)
        {
    
    
            foreach (var item in codelist)
            {
    
    
                //Console.WriteLine(@item);
                
                var check = ZipHelper.Fastzip(@item, @item + ".zip", password);
                if (check == true)
                {
    
    
                    Console.WriteLine("Compression succeeded");

                    try
                    {
    
    
                        Directory.Delete(@item, true);
                    }
                    catch (Exception e)
                    {
    
    
                        Console.WriteLine("Delete failed");
                    }

                }
                else
                {
    
    
                    Console.WriteLine("Compression failed");
                }
            }
        }

        /// <summary>
        /// 解压缩
        /// </summary>
        /// <param name="codelist">文件路径List</param>
        public static void UnZipWork(List<string> codelist)
        {
    
    
            foreach (var item in codelist)
            {
    
    
                //string BeforPath = @item.Substring(0, @item.LastIndexOf(@"\"));

                var check = ZipHelper.FastUnzip(@item + ".zip", @item, password);
                if (check == true)
                {
    
    
                    Console.WriteLine("Decompression succeeded");
                    try
                    {
    
    
                        File.Delete(@item + ".zip");
                    }
                    catch (Exception e)
                    {
    
    
                        Console.WriteLine("Delete failed");
                    }

                }
                else
                {
    
    
                    Console.WriteLine("Decompression failed");
                }
            }
        }

            /// <summary>
            /// 读取本地txt文件后写入到codelist中
            /// </summary>
            /// <param name="file_path">文件路径</param>
            /// <returns>返回数据</returns>
            public static List<string> codelist(string file_path)
        {
    
    

            List<string> codeList = new List<string>();
            //创建一个StreamReader对象
            FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read);
            //读取流
            StreamReader read = new StreamReader(fs);
            string strReadline;
            // int count=0;
            //遍历读取流
            while ((strReadline = read.ReadLine()) != null)
            {
    
    
                //添加到codeList中
                codeList.Add(strReadline);

            }
            //关闭流
            read.Close();
            //关闭文件
            fs.Close();

            return codeList;
        }
    }
}

 

使用方法

项目编译后在当前程序目录下创建sources.txt文件,并写入要压缩的文件目录路径。如:D:\abc
目录

  • 进行压缩操作
ScheduledOperation.exe

或者

ScheduledOperation.exe zip
  • 进行解压操作
ScheduledOperation.exe unzip

猜你喜欢

转载自blog.csdn.net/weixin_42362160/article/details/127318633