You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
6.5 KiB
158 lines
6.5 KiB
using Microsoft.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using ICSharpCode.SharpZipLib.Checksums;
|
|
using ICSharpCode.SharpZipLib.Zip;
|
|
using ICSharpCode.SharpZipLib.GZip;
|
|
using System.Windows;
|
|
using System.IO.Compression;
|
|
using Container.Common;
|
|
|
|
namespace Container.Control
|
|
{
|
|
class ZipFloClass
|
|
{
|
|
|
|
/// 利用 WinRAR 进行压缩
|
|
/// </summary>
|
|
/// <param name="path">将要被压缩的文件夹(绝对路径)</param>
|
|
/// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>
|
|
/// <param name="rarName">压缩文件的名称(包括后缀)</param>
|
|
/// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>
|
|
public bool RAR(string path, string rarPath, string rarName)
|
|
{
|
|
bool flag = false;
|
|
string rarexe; //WinRAR.exe 的完整路径
|
|
RegistryKey regkey; //注册表键
|
|
Object regvalue; //键值
|
|
string cmd; //WinRAR 命令参数
|
|
ProcessStartInfo startinfo;
|
|
Process process;
|
|
|
|
try
|
|
{
|
|
regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
|
|
regvalue = regkey.GetValue(""); // 键值为 "d:\Program Files\WinRAR\WinRAR.exe" "%1"
|
|
rarexe = regvalue.ToString();
|
|
regkey.Close();
|
|
rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:\Program Files\WinRAR\WinRAR.exe
|
|
Directory.CreateDirectory(path);
|
|
//压缩命令,相当于在要压缩的文件夹(path)上点右键 ->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
|
|
cmd = string.Format("a {0} {1} -r", rarName, path);
|
|
startinfo = new ProcessStartInfo();
|
|
startinfo.FileName = rarexe;
|
|
startinfo.Arguments = cmd; //设置命令参数
|
|
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口
|
|
startinfo.WorkingDirectory = rarPath;
|
|
process = new Process();
|
|
process.StartInfo = startinfo;
|
|
process.Start();
|
|
process.WaitForExit(); //无限期等待进程 winrar.exe 退出
|
|
if (process.HasExited)
|
|
{
|
|
flag = true;
|
|
}
|
|
process.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw e;
|
|
}
|
|
return flag;
|
|
}
|
|
/// <summary>
|
|
/// 利用 WinRAR 进行解压缩
|
|
/// </summary>
|
|
/// <param name="path">文件解压路径(绝对)</param>
|
|
/// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param>
|
|
/// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param>
|
|
/// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns>
|
|
public bool UnRAR(string path, string rarPath, string rarName)
|
|
{
|
|
bool flag = false;
|
|
string rarexe;
|
|
RegistryKey regkey;
|
|
Object regvalue;
|
|
string cmd;
|
|
ProcessStartInfo startinfo;
|
|
Process process;
|
|
try
|
|
{
|
|
regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
|
|
regvalue = regkey.GetValue("");
|
|
rarexe = regvalue.ToString();
|
|
regkey.Close();
|
|
rarexe = rarexe.Substring(1, rarexe.Length - 7);
|
|
Directory.CreateDirectory(path);
|
|
//解压缩命令,相当于在要压缩文件(rarName)上点右键 ->WinRAR->解压到当前文件夹
|
|
cmd = string.Format("x {0} {1} -y", rarName, path);
|
|
startinfo = new ProcessStartInfo();
|
|
startinfo.FileName = rarexe;
|
|
startinfo.Arguments = cmd;
|
|
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
startinfo.WorkingDirectory = rarPath;
|
|
process = new Process();
|
|
process.StartInfo = startinfo;
|
|
process.Start();
|
|
process.WaitForExit();
|
|
if (process.HasExited)
|
|
{
|
|
flag = true;
|
|
}
|
|
process.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Class_Log log = new Class_Log();
|
|
log.WriteLogFile(e.ToString(), "UnZipError");
|
|
}
|
|
return flag;
|
|
}
|
|
public static void UnZip(string SrcFile, string DstFile)
|
|
{
|
|
try
|
|
{
|
|
System.IO.Compression.ZipFile.ExtractToDirectory(SrcFile, DstFile);
|
|
// 列出压缩压缩文件
|
|
//using (FileStream zipFileToOpen = new FileStream(SrcFile, FileMode.Open))
|
|
//using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read))
|
|
//{
|
|
|
|
// foreach (var zipArchiveEntry in archive.Entries)
|
|
// MessageBox.Show(
|
|
// "FullName of the Zip Archive Entry: {0}", zipArchiveEntry.
|
|
// );
|
|
//}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Class_Log log = new Class_Log();
|
|
log.WriteLogFile(ex.ToString(), "UnZipError");
|
|
}
|
|
// 读取其中一个文件的内容
|
|
//using (FileStream zipFileToOpen = new FileStream(zipFilePath, FileMode.Open))
|
|
//using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read))
|
|
//{
|
|
// // 解压某个文件
|
|
// ZipArchiveEntry entry = archive.GetEntry("ZipArchiveSample.exe");
|
|
// Console.WriteLine(entry.Name);
|
|
// using (System.IO.Stream stream = entry.Open())
|
|
// {
|
|
// System.IO.Stream output = new FileStream("http://www.cnblogs.com/ZipArchiveSample.exe", FileMode.Create);
|
|
// int b = -1;
|
|
// while ((b = stream.ReadByte()) != -1)
|
|
// {
|
|
// output.WriteByte((byte)b);
|
|
// }
|
|
// output.Close();
|
|
// }
|
|
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
|