public class ZipFileHelper { List<string> urls = new List<string>(); void Director(string dir) { DirectoryInfo d = new DirectoryInfo(dir); FileSystemInfo[] fsinfos = d.GetFileSystemInfos(); foreach (FileSystemInfo fsinfo in fsinfos) { if (fsinfo is DirectoryInfo) //判斷是否為文件夾 { Director(fsinfo.FullName);//遞歸調用 } else { // Console.WriteLine(fsinfo.FullName);//輸出文件的全部路徑 urls.Add(fsinfo.FullName); } } } ///<summary> /// 創建ZIP文件 ///</summary> public void CreateZipFile(string dir, string sTempFile, string sPassWord) { try { Director(dir); var files = urls.ToArray(); using (ZipOutputStream s = new ZipOutputStream(File.Create(sTempFile))) { s.SetLevel(9); // 壓縮級別 0-9 if (sPassWord != "") { s.Password = sPassWord; //Zip壓縮文件密碼 } byte[] buffer = new byte[4096]; //緩沖區大小 foreach (string file in files) { if (!string.IsNullOrEmpty(file)) { if (File.Exists(file)) { ZipEntry entry = new ZipEntry(Path.GetFileName(file)); entry.DateTime = DateTime.Now; s.PutNextEntry(entry); using (FileStream fs = File.OpenRead(file)) { int sourceBytes; do { sourceBytes = fs.Read(buffer, 0, buffer.Length); s.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } else { //logger.Error("文件:" + file + "不存在。"); } } } s.Finish(); s.Close(); } } catch (Exception ex) { //logger.Error("壓縮文件時異常!"); //logger.Error("異常描述:\t" + ex.Message); //logger.Error("異常方法:\t" + ex.TargetSite); //logger.Error("異常堆棧:\t" + ex.StackTrace); } } /// <summary> /// /// </summary> /// <param name="files">放入ZIP的文件路勁(含文件名)</param> /// <param name="sTempFile">創建的ZIP文件路勁(含文件名)</param> /// <param name="sPassWord">ZIP文件密碼</param> /// <param name="folderNames">存放到ZIP中的文件夾名,空代表放在頂級目錄</param> public void CreateZipFileMutilFolder(string[] files, string sTempFile, string sPassWord, string[] folderNames) { try { using (ZipOutputStream s = new ZipOutputStream(File.Create(sTempFile))) { s.SetLevel(9); // 壓縮級別 0-9 if (sPassWord != "") { s.Password = sPassWord; //Zip壓縮文件密碼 } byte[] buffer = new byte[4096]; //緩沖區大小 int i = 0; foreach (string file in files) { if (!string.IsNullOrEmpty(file)) { if (File.Exists(file)) { ZipEntry entry = new ZipEntry((string.IsNullOrEmpty(folderNames[i]) ? "" : (folderNames[i] + "\\")) + Path.GetFileName(file)); entry.DateTime = DateTime.Now; s.PutNextEntry(entry); using (FileStream fs = File.OpenRead(file)) { int sourceBytes; do { sourceBytes = fs.Read(buffer, 0, buffer.Length); s.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } else { //logger.Error("文件:" + file + "不存在。"); } } i++; } s.Finish(); s.Close(); } } catch (Exception ex) { //logger.Error("壓縮文件時異常!"); //logger.Error("異常描述:\t" + ex.Message); //logger.Error("異常方法:\t" + ex.TargetSite); //logger.Error("異常堆棧:\t" + ex.StackTrace); } } }