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.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.GetFileNameWithoutExtens<wbr>ion(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压缩解压相关推荐
- SharpZipLib压缩解压
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 压缩/解压(ICSharpCode.SharpZipLib 类库)
我在 AgileIM 的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG.或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我 ...
- 使用C#压缩解压文件
为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- 【分享】AspxZip v2.0 在线压缩解压ZIP文档
下载地址: http://download.csdn.net/detail/rrrfff/5756977 当前版本:2.0.20140609 AspxZip v2.0 特点: 1.能够在支持 ASP. ...
- Asp.net 2.0 C#实现压缩/解压功能
Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能 对文件及目录的压缩及解压功能 (二). 运行图片示例 (三).代码 1. 压缩类 1/**//// <s ...
- 测试掌握的Linux解压,轻松掌握Linux压缩/解压文件的方法
对于在Linux下解压大型的*.zip文件,相信大家一般都会通过使用winrar直接在smb中来进行解压的操作,虽然说最终可能能够解压但有时候会存在解压时间长或者网络原因出错等故障的情况出现.那么有没 ...
- tar压缩解压命令详解
tar命令详解 -c:建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其 ...
- 一章: CentOS6.5 网络配置、修改主机名、添加硬盘、压缩——解压方法、VNC—server配置
1,配IP ,修改网络配置文件 配置网卡 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:50:56:83: ...
最新文章
- 第十六周项目一-小玩文件(2)
- 刚刚,旷视开源深度学习框架「天元」:Brain++内核,研发和落地都在用;孙剑:COCO三连冠背后的秘密武器...
- Ubuntu_Win10双系统互换注意事项以及蓝屏解决方案
- 轻松自动化---selenium-webdriver(python) (九)
- pwn波c语言程序,pwn的一些命令
- c语言字符串逆置,字符串逆置
- LeetCode 69 X的平方根
- linux yum下载不安装,【APP】yum只下载软件不安装的两种方法
- 小升初数学计算机考试题,重点中学小升初数学分班考试模拟试卷试题及解析总结计划-20210513100212.docx-原创力文档...
- idea类注释模板,方法注释模板。
- 苹果开发者账号注册、管理注意事项
- 通过文件流转加密压缩文件并下载
- win计算机名长度限制,Win7,Server 2012文件名过长无法删除解决方案
- 462 字节 C 代码实现雅虎 logo ACSII 动画
- 中关村科技企业融资缺口700亿 商业银行垂涎
- Ogre Giles
- 硬件PM系列(二):硬件产品经理需要熟知的设计流程
- 分布式专题(2)- 分布式 Java通信
- node、express框架
- Unity UDP传输图片
热门文章
- python x=[random.randint(0,100) for i in range(50)]什么意思?列表解析
- 营销老炮儿征战史:重视终端
- echarts图表无数据无时,在页面显示暂无数据
- 如何查看python有哪些内置函数_如何查看 Python 全部内置变量和内置函数?
- (转)说说芯片设计这点事
- 微信小程序 基础语法
- win10怎么用计算机算进制,Win10系统计算器如何转换进制-win10系统下各进制转换的方法 - 河东软件园...
- echarts图形铺满容器
- vue-cli3访问public文件夹静态资源的报错解决
- Unity脚本(一)