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 进行压缩 /// /// 将要被压缩的文件夹(绝对路径) /// 压缩后的 .rar 的存放目录(绝对路径) /// 压缩文件的名称(包括后缀) /// true 或 false。压缩成功返回 true,反之,false。 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; } /// /// 利用 WinRAR 进行解压缩 /// /// 文件解压路径(绝对) /// 将要解压缩的 .rar 文件的存放目录(绝对路径) /// 将要解压缩的 .rar 文件名(包括后缀) /// true 或 false。解压缩成功返回 true,反之,false。 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(); // } //} } } }