ICSharpCode.SharpZipLib.dll实现压缩解压一个树形目录
2008-06-23 13:59
716 查看
using System; using System.IO; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.GZip; using System.Collections; namespace ZipSharpLibray.Common.Control { /// <summary> /// Class1 的摘要说明。 /// </summary> public class FileZipCreate { private static FileZipCreate filezipcreate=null; private string zipfilecreatename; private string filesdirectorypath; private int dirnamelength = 0; private int ziplevel = 6; private FileZipCreate() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 压缩后的文件的全名称 /// </summary> public string ZipFileCreateName { set { this.zipfilecreatename=value; } get { return this.zipfilecreatename; } } /// <summary> /// 待压缩文件目录 /// </summary> public string FileDirectoryPath { set { this.filesdirectorypath=value; } get { return this.filesdirectorypath; } } public int ZipLevel { set { this.ziplevel=value; } get { return this.ziplevel; } } public static FileZipCreate ZipFileInstance() { if(filezipcreate==null) { filezipcreate=new FileZipCreate(); } return filezipcreate; } /// <summary> /// 压缩文件的方法 /// </summary> public void ZipFileCreate() { ZipOutputStream zipoutputstream= new ZipOutputStream(File.Create(this.zipfilecreatename)); zipoutputstream.SetLevel(this.ziplevel); Crc32 crc = new Crc32(); Hashtable fileList=this.getAllFies(); foreach (DictionaryEntry item in fileList) { FileStream fs = File.OpenRead(item.Key.ToString()); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(this.filesdirectorypath.Length-this.dirnamelength)); entry.DateTime = (DateTime)item.Value; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; zipoutputstream.PutNextEntry(entry); zipoutputstream.Write(buffer, 0, buffer.Length); } zipoutputstream.Finish(); zipoutputstream.Close(); } /// <summary> /// 获取所有文件 /// </summary> /// <returns></returns> private Hashtable getAllFies() { Hashtable FilesList = new Hashtable(); DirectoryInfo fileDire = new DirectoryInfo(this.filesdirectorypath); if(!fileDire.Exists) { throw new System.IO.FileNotFoundException("目录:"+ fileDire.FullName + "没有找到!"); } this.dirnamelength=fileDire.Name.Length; this.getAllDirFiles(fileDire,FilesList); this.getAllDirsFiles(fileDire.GetDirectories(),FilesList); return FilesList; } /// <summary> /// 获取一个文件夹下的所有文件夹里的文件 /// </summary> /// <param name="dirs"></param> /// <param name="filesList"></param> private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList) { foreach (DirectoryInfo dir in dirs) { foreach (FileInfo file in dir.GetFiles("*.*")) { filesList.Add(file.FullName,file.LastWriteTime); } this.getAllDirsFiles(dir.GetDirectories(),filesList); } } /// <summary> /// 获取一个文件夹下的文件 /// </summary> /// <param name="strDirName">目录名称</param> /// <param name="filesList">文件列表HastTable</param> private void getAllDirFiles(DirectoryInfo dir,Hashtable filesList) { foreach (FileInfo file in dir.GetFiles("*.*")) { filesList.Add(file.FullName, file.LastWriteTime); } } } } //解压 using System; using System.IO; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.GZip; namespace ZipSharpLibray.Common.Control { /// <summary> /// UZipFilesCreate 的摘要说明。 /// </summary> public class UZipFilesCreate { private string zipfilename; private string filescreatepath; private static UZipFilesCreate uzipfilescreate=null; private UZipFilesCreate() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// Zip文件目录 /// </summary> public string ZipFileName { set { this.zipfilename=value; } get { return this.zipfilename; } } /// <summary> /// 解压文件目录 /// </summary> public string filesCreatePath { set { this.filescreatepath=value; } get { return this.filescreatepath; } } public static UZipFilesCreate UZipFilesInstance() { if(uzipfilescreate==null) { uzipfilescreate=new UZipFilesCreate(); } return uzipfilescreate; } public void UZipCreateFiles() { ZipEntry entry; ZipInputStream zipinputstream = new ZipInputStream(File.OpenRead(this.zipfilename)); while ((entry = zipinputstream.GetNextEntry()) != null) { this.CreateDirList(entry.Name); string strPath=this.filescreatepath+"//"+entry.Name; FileStream streamWriter =File.Create(strPath); byte[] data = new byte[entry.Size]; zipinputstream.Read(data, 0, data.Length); streamWriter.Write(data, 0, data.Length); streamWriter.Close(); File.SetLastWriteTime(strPath,entry.DateTime); } zipinputstream.Close(); } private void CreateDirList(string filename) { string dirName=this.filescreatepath; string[] dirlevelname=filename.Split('//'); for(int i=0;i<dirlevelname.Length-1;i++) { dirName+="//"+dirlevelname[i]; if(Directory.Exists(dirName)) { continue; } Directory.CreateDirectory(dirName); } } } } //调用 using ZipSharpLibray.Common.Control; ...... private void Button1_Click(object sender, System.EventArgs e) { //压缩 FileZipCreate filezipcreate=FileZipCreate.ZipFileInstance(); filezipcreate.ZipFileCreateName=Server.MapPath(DateTime.Now.ToString("yyyyMMddmmss")+".zip"); filezipcreate.FileDirectoryPath=Server.MapPath("../Admin/Css"); filezipcreate.ZipFileCreate(); } private void Button2_Click(object sender, System.EventArgs e) { //解压 UZipFilesCreate uzipfilescreate=UZipFilesCreate.UZipFilesInstance(); uzipfilescreate.ZipFileName=this.File1.PostedFile.FileName.Trim(); uzipfilescreate.filesCreatePath=Server.MapPath(""); uzipfilescreate.UZipCreateFiles(); }
相关文章推荐
- ICSharpCode.SharpZipLib.dll实现压缩解压一个树形目录
- ICSharpCode.SharpZipLib.dll实现压缩解压一个树形目录
- 压缩解压目录和文件--ICSharpCode.SharpZipLib.dll 算法 (转)
- C#/ASP.NET/WinForm 通过ICSharpCode.SharpZipLib.dll实现文件夹、文件的压缩与解压
- C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用
- C#+ICSharpCode.SharpZipLib.dll实现压缩解压缩功能
- ICSharpCode.SharpZipLib.dll压缩的zip包,7zip解压时出错
- ICSharpCode.SharpZipLib实现压缩解压
- ICSharpCode.SharpZipLib.dll 压缩多文件
- 网络传输压缩DLL: ICSharpCode.SharpZipLib
- 基于(ICSharpCode.SharpZipLib.dll)的文件压缩方法,类文件
- ICSharpCode.SharpZipLib压缩的文件不能解压的原因
- ICSharpCode.SharpZipLib 实现文件压缩功能,可以压缩空文件夹
- C# 压缩文件 ICSharpCode.SharpZipLib.dll
- 压缩/解压(ICSharpCode.SharpZipLib 类库)
- ICSharpCode.SharpZipLib实现压缩解压缩
- ICSharpCode.SharpZipLib压缩解压
- C# 下利用ICSharpCode.SharpZipLib.dll实现文件/目录压缩、解压缩
- 使用 ICSharpCode.SharpZipLib.dll 压缩文件 方法实例
- ASP.NET生成压缩文件(rar打包)ICSharpCode.SharpZipLib.dll