使用SharpZipLib压缩与解压文件
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Collections.Generic;
using System.IO; namespace Zhong.Core
{
/// <summary>
/// 压缩解压操作类,使用的是SharpZipLib
/// </summary>
public class DCompress
{
private static object operateLock = new object();
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="srcFile">要压缩的文件路径</param>
/// <param name="destFile">生成的压缩文件路径</param>
public static void CompressFile(string srcFile, string destFile)
{
lock (operateLock)
{
if (string.IsNullOrEmpty(srcFile) || string.IsNullOrEmpty(destFile))
{
throw new ArgumentException("参数错误");
}
FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
FileStream fileStreamOut = new FileStream(destFile, FileMode.Create, FileAccess.Write);
ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut);
//zipOutStream.SetLevel(6); //设置压缩等级,默认为6
byte[] buffer = new byte[];
ZipEntry entry = new ZipEntry(Path.GetFileName(srcFile));
zipOutStream.PutNextEntry(entry);
int size;
do
{
size = fileStreamIn.Read(buffer, , buffer.Length);
zipOutStream.Write(buffer, , size);
} while (size > );
zipOutStream.Dispose();
fileStreamOut.Dispose();
fileStreamIn.Dispose();
} }
/// <summary>
/// 压缩多个文件
/// </summary>
/// <param name="srcFiles">多个文件路径</param>
/// <param name="destFile">压缩文件的路径</param>
public static void ZipFiles(string[] srcFiles, string destFile)
{
if (srcFiles == null || string.IsNullOrEmpty(destFile))
{
throw new ArgumentException("参数错误");
}
using (ZipFile zip = ZipFile.Create(destFile))
{
zip.BeginUpdate();
//add file
foreach (string filePath in srcFiles)
{
zip.Add(filePath);
}
zip.CommitUpdate();
}
//(new FastZip()).CreateZip(@"E:\1.zip", @"E:\1\", true, "");
}
/// <summary>
/// 压缩目录
/// </summary>
/// <param name="dir">目录路径</param>
/// <param name="destFile">压缩文件路径</param>
public static void ZipDir(string dir, string destFile)
{
if (string.IsNullOrEmpty(dir) || string.IsNullOrEmpty(destFile))
{
throw new ArgumentException("参数错误");
}
string[] files = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories);
ZipFiles(files, destFile);
}
/// <summary>
/// 列表压缩文件里的所有文件
/// </summary>
/// <param name="zipPath">压缩文件路径</param>
/// <returns></returns>
public static List<string> GetFileList(string zipPath)
{
List<string> files = new List<string>();
if (string.IsNullOrEmpty(zipPath))
{
throw new ArgumentException("参数错误");
}
using (ZipFile zip = new ZipFile(zipPath))
{
string list = string.Empty;
foreach (ZipEntry entry in zip)
{
if (entry.IsFile)
{
files.Add(entry.Name);
}
}
}
return files;
}
/// <summary>
/// 删除zip文件中的某个文件
/// </summary>
/// <param name="zipPath">压缩文件路径</param>
/// <param name="files">要删除的某个文件</param>
public static void DeleteFileFromZip(string zipPath, string[] files)
{
if (string.IsNullOrEmpty(zipPath) || files == null)
{
throw new ArgumentException("参数错误");
}
using (ZipFile zip = new ZipFile(zipPath))
{
zip.BeginUpdate();
foreach (string f in files)
{
zip.Delete(f);
}
zip.CommitUpdate();
}
}
/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipPath">要解压的文件</param>
/// <param name="outputDir">解压后放置的目录</param>
public static void UnZipFile(string zipPath, string outputDir)
{
(new FastZip()).ExtractZip(zipPath, outputDir, "");
} /// <summary>
/// 解压文件
/// </summary>
/// <param name="srcFile">压缩文件路径</param>
/// <param name="destDir">解压后文件夹的路径</param>
public static void Decompress(string srcFile, string destDir)
{
lock (operateLock)
{
FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
ZipEntry entry;
while ((entry = zipInStream.GetNextEntry()) != null)
{
FileStream fileStreamOut = new FileStream(destDir + @"\" + entry.Name, FileMode.Create, FileAccess.Write);
int size;
byte[] buffer = new byte[];
do
{
size = zipInStream.Read(buffer, , buffer.Length);
fileStreamOut.Write(buffer, , size);
} while (size > );
fileStreamOut.Dispose();
}
zipInStream.Dispose();
fileStreamIn.Dispose();
} }
}
}
使用SharpZipLib压缩与解压文件的更多相关文章
- ICSharpCode.SharpZipLib 压缩、解压文件 附源码
http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, ...
- C# 压缩、解压文件夹或文件(带密码)
今天梳理一下项目中用到的压缩.解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件.今天就好好整理记录下,别下次遇到需求又重头开始了. DotNetZip DotNetZip是一个开源的免 ...
- AIX系统上压缩与解压文件
压缩. 命令格式: #tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加,比如打包时,将其他文件追加进来使用该参数. t:显示tar包里的内容,但还原 ...
- Linux学习笔记之AIX系统上压缩与解压文件
0x00 概述 AIX机器真难用,一时半会还真适应不了. 0x01 压缩tar 命令格式: # tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加 ...
- C#工具类:使用SharpZipLib进行压缩、解压文件
SharpZipLib是一个开源的C#压缩解压库,应用非常广泛.就像用ADO.NET操作数据库要打开连接.执行命令.关闭连接等多个步骤一样,用SharpZipLib进行压缩和解压也需要多个步骤.Sha ...
- Linux命令(16)压缩,解压文件
tar: 简介:tar命令只是把目录打包成一个归档(文件),并不负责压缩.在tar命令中可以带参数调用gzip或bzip2压缩.因为gzip和bzip2只能压缩单个文件. 在linux下是不需要后缀名 ...
- 本地上传文件至服务器的技巧(linux文件压缩及解压文件)
linux(ubuntu)文件解压及压缩文件 ubuntu支持文件的解压及压缩功能, 如果ubuntu上面没有安装过unzip工具的话,可以通过下面命令安装: sudo apt-get install ...
- (转)使用 linux tar 命令压缩与解压文件
原文链接 http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r: ...
- 【转】iOS开发之压缩与解压文件
ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单方法:从http://code.google.com/p/ziparch ...
随机推荐
- IDEA里点击Build,再Build Artifacts没反应,灰色的?解决办法(图文详解)
不多说,直接上干货! 问题详情 如下:点击Build ,再 Build -> Build Artifacts,没反应??? 解决办法 1.File,再Project Structure 2.然后 ...
- 【原】中文Ubuntu主目录下的文档文件夹改回英文
想把中文Ubuntu主目录下的文档文件夹改回英文,在Terminal下面操作的时候要输入中文特别不方便,于是便用了更改名字的想法 方法一: 首先把那几个中文名称修改成相应的英文,比如 Desktop. ...
- docker容器网络通信原理分析(转)
概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求.而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信.而本文将分别针对这两 ...
- struct in_addr 结构体
struct in_addr 结构体: struct in_addr { in_addr_t s_addr; }; 表示一个32位的IPv4地址. in_addr_t一般为32位的unsigned i ...
- EF Core 实现多租户
目录 SAAS 和多租户 多租户数据隔离方案 使用 EF Core 简单实现多租户 单数据库实现 多数据库实现 源代码 参考 SAAS 和多租户 SaaS(软件及服务)区别于其他应用程序的主要特征就是 ...
- MCS锁和CLH锁
CLH锁:自旋锁,在上一个节点上等待,先上代码: public class CLHLock { /** * 保证原子性操作 * */ private AtomicReference<Node&g ...
- mysql5.0版本下载地址
http://dev.mysql.com/downloads/mysql/5.0.html Other Downloads: Windows (x86, 32-bit), ZIP Archive 5. ...
- C#在.NET编译执行过程
1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件. 程序集要么是可执行的,要么是DLL 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言 程序集包含如下信息: 程序的CI ...
- Java - 延迟初始化
延迟初始化(lazy initialization),也就是在真正被使用的时候才开始初始化的技巧. 不论是静态还是实例,都可以进行延迟初始化. 其本质是初始化开销和访问开销之间的权衡. 毕竟是一种优化 ...
- MVC 之var与dynamic
如果你用MVC写过程序,那么你应该知道ViewBag这个用于前后台的数据传递工具,那么你是否对ViewBag的用法感到过疑惑呢? ViewBag.Mode1l=new object(); ViewBa ...