private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fldg = new FolderBrowserDialog();
if (fldg.ShowDialog() == DialogResult.OK)
{
///接收路径
string path = fldg.SelectedPath;
BllZhiTongChe bllZhiTongChe = new BllZhiTongChe();
bllZhiTongChe.UnRarOrZip(path, "*.zip");
textBox1.Text = path;
textBox2.AppendText(LogClass.message);
textBox2.SelectionStart = this.textBox1.Text.Length;
textBox2.ScrollToCaret();//滚动到最后一行
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using AliWorkbenchProgram.Log;
namespace AliWorkbenchProgram.BLL
{
public class BllZhiTongChe
{
public void UnRarOrZip(string path, string str)
{
// string[] file = Directory.GetFiles(path, "*.zip", SearchOption.AllDirectories);
string[] fileNames = Directory.GetFiles(path, str, SearchOption.AllDirectories);
LogClass.message += "\r\n本次已选择待解压文件总数:" + fileNames.Length.ToString() + " 个" + "\r\n";
foreach (string strFileName in fileNames)
{
string UnZipPath = strFileName.Substring(0, strFileName.LastIndexOf("\\")); //获得待解压文件存放绝对路径,不带文件名
UnZipPath = UnZipPath.Substring(0, UnZipPath.LastIndexOf(@"\"));
UnZipPath = UnZipPath.Substring(0, UnZipPath.LastIndexOf(@"\"));
UnZipPath = Path.Combine(UnZipPath, "csv");
UnRarOrZip(UnZipPath, strFileName, true, null);
}
}
/// <summary>
/// 解压RAR和ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe))
/// </summary>
/// <param name="UnPath">解压后文件保存目录</param>
/// <param name="rarPathName">待解压文件存放绝对路径(包括文件名称)</param>
/// <param name="IsCover">所解压的文件是否会覆盖已存在的文件(如果不覆盖,所解压出的文件和已存在的相同名称文件不会共同存在,只保留原已存在文件)</param>
/// <param name="PassWord">解压密码(如果不需要密码则为空)</param>
/// <returns>true(解压成功);false(解压失败)</returns>
public bool UnRarOrZip(string UnPath, string rarPathName, bool IsCover, string PassWord)
{
if (!Directory.Exists(UnPath))
Directory.CreateDirectory(UnPath);
Process Process1 = new Process();
Process1.StartInfo.FileName = "Winrar.exe";
Process1.StartInfo.CreateNoWindow = true;
// Process1.StartInfo.UseShellExecute = true;
// Process1.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//设置启动进程时使用的窗口状态,在最大化窗口、最小化窗口、正常(即非最大化也非最小化)窗口还是在不可见的窗口中启动进程。默认为 normal
string cmd = "";
if (!string.IsNullOrEmpty(PassWord) && IsCover)
//解压加密文件且覆盖已存在文件( -p密码 )
cmd = string.Format(" x -p{0} -o+ {1} {2} -y", PassWord, rarPathName, UnPath);
else if (!string.IsNullOrEmpty(PassWord) && !IsCover)
//解压加密文件且不覆盖已存在文件( -p密码 )
cmd = string.Format(" x -p{0} -o- {1} {2} -y", PassWord, rarPathName, UnPath);
else if (IsCover)
//覆盖命令( x -o+ 代表覆盖已存在的文件)
cmd = string.Format(" x -o+ {0} {1} -y", rarPathName, UnPath);
else
//不覆盖命令( x -o- 代表不覆盖已存在的文件)
cmd = string.Format(" x -o- {0} {1} -y", rarPathName, UnPath);
//命令
Process1.StartInfo.Arguments = cmd;
Process1.Start();
Process1.WaitForExit();//无限期等待进程 winrar.exe 退出
//Process1.ExitCode==0指正常执行,Process1.ExitCode==1则指不正常执行
string unZipFileName = rarPathName.Substring(rarPathName.LastIndexOf("\\") + 1);//获取文件名,不带文件路径
if (Process1.ExitCode == 0)
{
//message += "解压成功:第" + unZipFileCout.ToString() + " 个" + "\r\n";
LogClass.message += "解压成功:文件名 " + unZipFileName + "\r\n";
Process1.Close();
return true;
}
else
{
LogClass.message += "解压失败:文件名 " + unZipFileName + "\r\n";
Process1.Close();
return false;
}
}
/// <summary>
/// 压缩文件成RAR或ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe))
/// </summary>
/// <param name="filesPath">将要压缩的文件夹或文件的绝对路径</param>
/// <param name="rarPathName">压缩后的压缩文件保存绝对路径(包括文件名称)</param>
/// <param name="IsCover">所压缩文件是否会覆盖已有的压缩文件(如果不覆盖,所压缩文件和已存在的相同名称的压缩文件不会共同存在,只保留原已存在压缩文件)</param>
/// <param name="PassWord">压缩密码(如果不需要密码则为空)</param>
/// <returns>true(压缩成功);false(压缩失败)</returns>
public bool CondenseRarOrZip(string filesPath, string rarPathName, bool IsCover, string PassWord)
{
string rarPath = Path.GetDirectoryName(rarPathName);
if (!Directory.Exists(rarPath))
Directory.CreateDirectory(rarPath);
Process Process1 = new Process();
Process1.StartInfo.FileName = "Winrar.exe";
Process1.StartInfo.CreateNoWindow = true;
string cmd = "";
if (!string.IsNullOrEmpty(PassWord) && IsCover)
//压缩加密文件且覆盖已存在压缩文件( -p密码 -o+覆盖 )
cmd = string.Format(" a -ep1 -p{0} -o+ {1} {2} -r", PassWord, rarPathName, filesPath);
else if (!string.IsNullOrEmpty(PassWord) && !IsCover)
//压缩加密文件且不覆盖已存在压缩文件( -p密码 -o-不覆盖 )
cmd = string.Format(" a -ep1 -p{0} -o- {1} {2} -r", PassWord, rarPathName, filesPath);
else if (string.IsNullOrEmpty(PassWord) && IsCover)
//压缩且覆盖已存在压缩文件( -o+覆盖 )
cmd = string.Format(" a -ep1 -o+ {0} {1} -r", rarPathName, filesPath);
else
//压缩且不覆盖已存在压缩文件( -o-不覆盖 )
cmd = string.Format(" a -ep1 -o- {0} {1} -r", rarPathName, filesPath);
//命令
Process1.StartInfo.Arguments = cmd;
Process1.Start();
Process1.WaitForExit();//无限期等待进程 winrar.exe 退出
//Process1.ExitCode==0指正常执行,Process1.ExitCode==1则指不正常执行
if (Process1.ExitCode == 0)
{
Process1.Close();
return true;
}
else
{
Process1.Close();
return false;
}
}
}
}