using System; using System.Collections.Generic; using System.Text;
///第三方dll using ICSharpCode.SharpZipLib; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; using System.IO; using log4net; using log4net.Config; using System.Text.RegularExpressions;
namespace Test.BLL { public class TestZipFile { protected static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
/// <summary> /// 加密压缩包的方法 /// </summary> /// <param name="strFile"></param> /// <param name="strZip"></param> /// <param name="sPassWord"></param> public void ZipFile(string strFile, string strZip, string sPassWord) { if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar; ZipOutputStream s = new ZipOutputStream(File.Create(strZip)); if (sPassWord != "") { s.Password = sPassWord; //Zip压缩文件密码 } s.SetLevel(6); zip(strFile, s, strFile); s.Finish(); s.Close(); } /// <summary> /// 压缩文件夹 /// </summary> /// <param name="strFile"></param> /// <param name="strZip"></param> /// <param name="sPassWord"></param> public void ZipFile(string strFile, string strZip) { if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar; ZipOutputStream s = new ZipOutputStream(File.Create(strZip)); s.SetLevel(6); zip(strFile, s, strFile); s.Finish(); s.Close(); } private void zip(string strFile, ZipOutputStream s, string staticFile) { if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar; Crc32 crc = new Crc32(); string[] filenames = Directory.GetFileSystemEntries(strFile); foreach (string file in filenames) {
if (Directory.Exists(file)) { zip(file, s, staticFile); }
else // 否则直接压缩文件 { //打开压缩文件 FileStream fs = File.OpenRead(file);
byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1); ZipEntry entry = new ZipEntry(tempfile);
entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length); } } }
} }
|
请发表评论