当压缩文件过多的时候,我们不能手动一个个去解压,所以我们需要一个解压程序来实现快速压缩,本文就演示如果使用C#调用7zip来解压文件。

来解压程序前,你需要安装7-zip,这是一个免费的解压缩软件,是国际通用的。然后我们就可以开始我们的程序了。
首先我们需要一个Helper程序来实现压缩,看下面的代码
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace DailyBackup
{
    public class ZipHelper
    {
        // Fields
        private string _7zInstallPath = "";
        // Methods
        public ZipHelper(string str7zInstallPath)
        {
            this._7zInstallPath = str7zInstallPath;
        }
        /// 
        /// 压缩文件夹目录
        ///  
        /// 指定需要压缩的目录,如C:\test\,将压缩test目录下的所有文件
        /// 压缩后压缩文件的存放目录
        public void CompressDirectory(string strInDirectoryPath, string strOutFilePath)
        {
            Process process = new Process();
            process.StartInfo.FileName = this._7zInstallPath;
            process.StartInfo.Arguments = " a -t7z " + strOutFilePath + " " + strInDirectoryPath + " -r";
            //隐藏DOS窗口
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();
            process.WaitForExit();
            process.Close();
        }
        /// 
        /// 压缩文件
        ///  
        /// 指定需要压缩的文件,如C:\test\demo.xlsx,将压缩demo.xlsx文件
        /// 压缩后压缩文件的存放目录
        public void CompressFile(string strInFilePath, string strOutFilePath)
        {
            Process process = new Process();
            process.StartInfo.FileName = this._7zInstallPath;
            process.StartInfo.Arguments = " a -t7z " + strOutFilePath + " " + strInFilePath + "";
            //隐藏DOS窗口
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();
            process.WaitForExit();
            process.Close();
        }
        /// 
        /// 解压缩
        ///  
        /// 压缩文件的路径
        /// 解压缩后文件的路径
        public void DecompressFileToDestDirectory(string strInFilePath, string strOutDirectoryPath)
        {
            Process process = new Process();
            process.StartInfo.FileName = this._7zInstallPath;
            process.StartInfo.Arguments = " x " + strInFilePath + " -o" + strOutDirectoryPath + " -r ";
            //隐藏DOS窗口
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();
            process.WaitForExit();
            process.Close();
        }
    }
}
其中的构造函数参数_7zInstallPath就是7zip的安装目录下,7z.exe文件所在的路径。
然后我们还需要一个中间类来包装调用7zip的接口。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace DailyBackup
{
    public static class UZip
    {
        public static void Unzip(string compressFilePhysicalPath, string uZipFilePhysicalPath)
        {
            DirectoryInfo DirecInfo = new DirectoryInfo(compressFilePhysicalPath);
            if (DirecInfo.Exists)
            {
                foreach (FileInfo fileInfo in DirecInfo.GetFiles("*.zip"))
                {
                    try
                    {
                        var zipHleper = new ZipHelper("7zip安装目录的7z.exe路径");
                        zipHleper.DecompressFileToDestDirectory(fileInfo.FullName, uZipFilePhysicalPath);
                    }
                    catch(Exception e)
                    {
                    }
                }
            }
        }
    }
}
上面的代码我们写了一个压缩程序的静态类,Unzip方法的参数分别是压缩文件所在的目录,和把压缩文件解压后放置的目录。
所以我们在主程序可以这样用了:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;
using System.Diagnostics;
using Microsoft.Win32;
using System.Configuration;
using System.IO;
using System.Globalization;
using System.Threading;
using DailyBackup;
namespace Backup
{
    /// 
    /// 备份IIS网站以及数据库
    ///  
    class Program
    {
        /// 
        /// 压缩文件存放路径
        ///  
        public static readonly string compressFilePhysicalPath = ConfigurationManager.AppSettings["CompressFilePhysicalPath"];
        // 
        /// 解压文件存放路径
        ///  
        public static readonly string uZipFilePhysicalPath = ConfigurationManager.AppSettings["UZipFilePhysicalPath"];
        /// 
        /// Mian method.
        ///  
        /// 
        static void Main(string[] args)
        {
            try
            {
                UZip.Unzip(compressFilePhysicalPath, uZipFilePhysicalPath);
            }
            catch(Exception e)
            {
                Log.LogInfo(e.Message);
            }
            
        }
    }
}