ICSharpCode.SharpZipLib压缩解压
一、使用ICSharpCode.SharpZipLib.dll;
下载地址
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
二、基于(ICSharpCode.SharpZipLib.dll)的文件压缩方法,类文件
压缩文件
- using System;
- using System.IO;
- using System.Collections;
- using ICSharpCode.SharpZipLib.Checksums;
- using ICSharpCode.SharpZipLib.Zip;
- namespace FileCompress
- {
- /// <summary>
- /// 功能:压缩文件
- /// creator chaodongwang 2009-11-11
- /// </summary>
- public class ZipClass
- {
- /// <summary>
- /// 压缩单个文件
- /// </summary>
- /// <param name="FileToZip">被压缩的文件名称(包含文件路径)</param>
- /// <param name="ZipedFile">压缩后的文件名称(包含文件路径)</param>
- /// <param name="CompressionLevel">压缩率0(无压缩)-9(压缩率最高)</param>
- /// <param name="BlockSize">缓存大小</param>
- public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)
- {
- //如果文件没有找到,则报错
- if (!System.IO.File.Exists(FileToZip))
- {
- throw new System.IO.FileNotFoundException("文件:" + FileToZip + "没有找到!");
- }
- if (ZipedFile == string.Empty)
- {
- ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";
- }
- if (Path.GetExtension(ZipedFile) != ".zip")
- {
- ZipedFile = ZipedFile + ".zip";
- }
- ////如果指定位置目录不存在,创建该目录
- //string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("/"));
- //if (!Directory.Exists(zipedDir))
- // Directory.CreateDirectory(zipedDir);
- //被压缩文件名称
- string filename = FileToZip.Substring(FileToZip.LastIndexOf('//') + 1);
- System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
- System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
- ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
- ZipEntry ZipEntry = new ZipEntry(filename);
- ZipStream.PutNextEntry(ZipEntry);
- ZipStream.SetLevel(CompressionLevel);
- byte[] buffer = new byte[2048];
- System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
- ZipStream.Write(buffer, 0, size);
- try
- {
- while (size < StreamToZip.Length)
- {
- int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
- ZipStream.Write(buffer, 0, sizeRead);
- size += sizeRead;
- }
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- finally
- {
- ZipStream.Finish();
- ZipStream.Close();
- StreamToZip.Close();
- }
- }
- /// <summary>
- /// 压缩文件夹的方法
- /// </summary>
- public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)
- {
- //压缩文件为空时默认与压缩文件夹同一级目录
- if (ZipedFile == string.Empty)
- {
- ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("/") + 1);
- ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("/")) +"//"+ ZipedFile+".zip";
- }
- if (Path.GetExtension(ZipedFile) != ".zip")
- {
- ZipedFile = ZipedFile + ".zip";
- }
- using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))
- {
- zipoutputstream.SetLevel(CompressionLevel);
- Crc32 crc = new Crc32();
- Hashtable fileList = getAllFies(DirToZip);
- 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(DirToZip.Length + 1));
- 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);
- }
- }
- }
- /// <summary>
- /// 获取所有文件
- /// </summary>
- /// <returns></returns>
- private Hashtable getAllFies(string dir)
- {
- Hashtable FilesList = new Hashtable();
- DirectoryInfo fileDire = new DirectoryInfo(dir);
- if (!fileDire.Exists)
- {
- throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");
- }
- 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.Collections.Generic;
- /// <summary>
- /// 解压文件
- /// </summary>
- using System;
- using System.Text;
- using System.Collections;
- using System.IO;
- using System.Diagnostics;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Data;
- using ICSharpCode.SharpZipLib.Zip;
- using ICSharpCode.SharpZipLib.Zip.Compression;
- using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
- namespace FileCompress
- {
- /// <summary>
- /// 功能:解压文件
- /// creator chaodongwang 2009-11-11
- /// </summary>
- public class UnZipClass
- {
- /// <summary>
- /// 功能:解压zip格式的文件。
- /// </summary>
- /// <param name="zipFilePath">压缩文件路径</param>
- /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
- /// <param name="err">出错信息</param>
- /// <returns>解压是否成功</returns>
- public void UnZip(string zipFilePath, string unZipDir)
- {
- if (zipFilePath == string.Empty)
- {
- throw new Exception("压缩文件不能为空!");
- }
- if (!File.Exists(zipFilePath))
- {
- throw new System.IO.FileNotFoundException("压缩文件不存在!");
- }
- //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
- if (unZipDir == string.Empty)
- unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
- if (!unZipDir.EndsWith("/"))
- unZipDir += "/";
- if (!Directory.Exists(unZipDir))
- Directory.CreateDirectory(unZipDir);
- using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
- {
- ZipEntry theEntry;
- while ((theEntry = s.GetNextEntry()) != null)
- {
- string directoryName = Path.GetDirectoryName(theEntry.Name);
- string fileName = Path.GetFileName(theEntry.Name);
- if (directoryName.Length > 0)
- {
- Directory.CreateDirectory(unZipDir + directoryName);
- }
- if (!directoryName.EndsWith("/"))
- directoryName += "/";
- if (fileName != String.Empty)
- {
- using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
- {
- int size = 2048;
- byte[] data = new byte[2048];
- while (true)
- {
- size = s.Read(data, 0, data.Length);
- if (size > 0)
- {
- streamWriter.Write(data, 0, size);
- }
- else
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
ICSharpCode.SharpZipLib压缩解压的更多相关文章
- .NET使用ICSharpCode.SharpZipLib压缩/解压文件
SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...
- SharpZipLib压缩解压
一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...
- SharpZipLib压缩解压的使用
项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...
- C#基础知识之SharpZipLib压缩解压的使用
项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...
- C#使用SharpZipLib压缩解压文件
#region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...
- 通过SharpZipLib来压缩解压文件
在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更 ...
- 使用SharpZIpLib写的压缩解压操作类
使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...
- (转载)C#压缩解压zip 文件
转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...
- 使用C#压缩解压rar和zip格式文件
为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...
随机推荐
- sharepoint读取站点下列表
前言 还是自己做着练习,也算对这个代码的一个认识吧.东西没什么. 过程 这是后台的一下代码,其中我会对标注的地方解释一下. 标注1:是获取的列表中的某一个列名,标注2:是这个列表下的数据列的名称,我们 ...
- PHP代码分离
所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路. 在这之前,我们制作 PHP 程序页面的时候.都是 HTML 和 PHP 混合写 ...
- 领域驱动设计(Domain Driven Design)参考架构详解
摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ...
- bzoj 2331: [SCOI2011]地板 插头DP
2331: [SCOI2011]地板 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 541 Solved: 239[Submit][Status] D ...
- clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)
低于5.0版本的不支持设置成 或 在Xcode中做如下配置 静态库工程也要做同样设置
- django作models的UPDATE时,注意有过滤外键的情况
就是如果要过滤的时候,存在外键,则需要取到原始字段的名称,不然就是ID. 原始名称以__(双下划线)引用. 如: def path2db(release_version, develop_versio ...
- QSplashScreen开机画面(不断的repaint)
QApplication a(argc, argv); QPixmap pixmap(":/Image/start.png");//绑定启动图片 QSplashScre ...
- APUE读书笔记-第18章-终端I/O
18.1 引言 *终端I/O的用途很广泛,包括用于终端.计算机之间的直接连线.调制解调器以及打印机等等,所以终端I/O系统非常复杂 18.2 综述 *终端I/O有两种不同的工作模式: (1)规范模式输 ...
- 创建LIST分区
一:创建分区表 create table T_PM_ACCT_DTL_AF_TEST ( DATA_DATE NUMBER(8), ACCT_NO VARCHAR2(100), ACCT_ORD VA ...
- 第k大数问题
解法1: 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k). 解法2: 利用选择排序或交互排序,K次选择后即可得到第k大的数.总的时间复杂度为O( ...