using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Web; using Microsoft.Win32; using System.Runtime.InteropServices; using System.Diagnostics; using System.Collections; namespace CcdodoZip { public class DoZip { #region 创建文件夹 /// <summary> /// 创建文件夹 /// </summary> /// <param name="str">待创建的目录名</param> private static void CreateDir(string dir) { if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); } #endregion // #region 压缩文件 /// <summary> /// 压缩文件 /// </summary> /// <param name="OuputFileName">输出的文件名无后缀将使用默认后缀</param> /// <param name="FilePath">需要压缩的目录</param> /// <param name="File">需要压缩的文件或者文件类型</param> /// <returns></returns> public static string Zip(string OuputFileName, string FilePath, string FileName) { string result = ""; String Rar; RegistryKey Reg; Object Obj; String Info; ProcessStartInfo StartInfo; Process Process; try { Reg = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/Shell/Open/Command"); Obj = Reg.GetValue(""); Rar = Obj.ToString(); Reg.Close(); Rar = Rar.Substring(1, Rar.Length - 7); //------ string RarFile = HttpContext.Current.Server.MapPath("~/RarFile"); CreateDir(RarFile);//输出的压缩包存放的目录 result = RarFile + "/" + OuputFileName;//压缩后的文件完整路径 //------ Info = "a -r -ep1 " + result + " " + FilePath + "/" + FileName;//这里为rar的压缩命令格式 StartInfo = new ProcessStartInfo(); StartInfo.FileName = Rar; StartInfo.Arguments = Info; StartInfo.WindowStyle = ProcessWindowStyle.Hidden; StartInfo.WorkingDirectory = FilePath;//获取或设置要启动的进程的初始目录。 Process = new Process(); Process.StartInfo = StartInfo; Process.Start(); } catch (Exception){} return result; } // public static string Zip(string OuputFileName, string FilePath) { return Zip(OuputFileName, FilePath, "*.*"); } /// <summary> /// 压缩html文件 /// </summary> /// <param name="OuputFileName"></param> /// <param name="FilePath"></param> /// <returns></returns> public static string ZipHtml(string OuputFileName, string FilePath) { return Zip(OuputFileName, FilePath, "*.*htm*"); } /// <summary> /// 压缩txt文件 /// </summary> /// <param name="OuputFileName"></param> /// <param name="FilePath"></param> /// <returns></returns> public static string ZipTxt(string OuputFileName, string FilePath) { return Zip(OuputFileName, FilePath, "*.txt"); } #endregion // #region 解压缩 /// <summary> /// 解压缩 /// </summary> /// <param name="RarFilePath">压缩包的完整路径</param> /// <param name="OuputFileDir">解压后文件存放的目录</param> /// <returns></returns> public static bool DeZip(string RarFilePath, string OuputFileDir) { bool result = false; String Rar; RegistryKey Reg; Object Obj; String Info; ProcessStartInfo StartInfo; Process Process; try { Reg = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRar.exe/Shell/Open/Command"); Obj = Reg.GetValue(""); Rar = Obj.ToString(); Reg.Close(); Rar = Rar.Substring(1, Rar.Length - 7); Info = " X " + RarFilePath + " " + OuputFileDir; StartInfo = new ProcessStartInfo(); StartInfo.FileName = Rar; StartInfo.Arguments = Info; StartInfo.WindowStyle = ProcessWindowStyle.Hidden; Process = new Process(); Process.StartInfo = StartInfo; Process.Start(); result = true; } catch (Exception){} return result; } #endregion // #region 获取指定目录的所有文件 /// <summary> /// 获取指定目录的所有文件 /// </summary> /// <param name="dir"></param> /// <returns></returns> public static string[] ListFiles(string dir) { string[] files = Directory.GetFiles(dir); ArrayList result = new ArrayList(); for (int i = 0; i < files.Length; i++) result.Add(files[i]); return (string[])result.ToArray(typeof(string)); } #endregion // #region 获取指定目录下的子目录 /// <summary> /// 获取指定目录下的子目录 /// </summary> /// <param name="dir"></param> /// <returns></returns> public static string[] ListDirectories(string dir) { string[] Directories = Directory.GetDirectories(dir); ArrayList result = new ArrayList(); for (int i = 0; i < Directories.Length; i++) result.Add(Directories[i].Replace(dir, "")); return (string[])result.ToArray(typeof(string)); } #endregion // #region 遍历目录 /// <summary> /// 遍历目录 /// </summary> /// <param name="dir"></param> /// <returns></returns> public static string[] ListFolder(string FirstDir,string dir) { ArrayList result = new ArrayList(); string[] files = ListFiles(dir); for (int i = 0; i < files.Length; i++) result.Add(files[i].Replace(FirstDir, "").Replace("//", "/")); //递归 string[] Directories = ListDirectories(dir); string[] fileList; for (int i = 0; i < Directories.Length; i++) { if (Directory.Exists(dir + Directories[i])) { fileList = ListFolder(FirstDir,dir + Directories[i]); for (int j = 0; j < fileList.Length; j++) result.Add(fileList[j].Replace(FirstDir, "").Replace("//","/")); } else continue; } return (string[])result.ToArray(typeof(string)); } #endregion // } }