C# 压缩和解压文件(SharpZipLib)
先从网上下载ICSharpCode.SharpZipLib.dll类库
将文件或文件夹压缩为zip,函数如下
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="fileName">压缩文件路径</param>
/// <param name="zipName">压缩的文件名称</param>
/// <param name="error">返回的错误信息</param>
/// <returns></returns>
public bool FileToZip(string fileName, string zipName, out string error)
{
error = string.Empty;
try
{
ZipOutputStream s = new ZipOutputStream(File.Create(zipName));
s.SetLevel(); // 0 - store only to 9 - means best compression
zip(fileName, s);
s.Finish();
s.Close();
return true;
}
catch (Exception ex)
{
error = ex.Message;
return false;
}
} private void zip(string fileName, ZipOutputStream s)
{
if (fileName[fileName.Length - ] != Path.DirectorySeparatorChar)
fileName += Path.DirectorySeparatorChar;
Crc32 crc = new Crc32();
string[] filenames = Directory.GetFileSystemEntries(fileName);
foreach (string file in filenames)
{
if (Directory.Exists(file))
{
zip(file, s);
}
else // 否则直接压缩文件
{
//打开压缩文件
FileStream fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length];
fs.Read(buffer, , buffer.Length);
string tempfile = Path.GetFileName(file);
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, , buffer.Length);
}
}
}
将zip解压为文件或文件夹,函数代码如下
/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipName">解压文件路径</param>
/// <param name="fileDirName">解压到文件夹的名称</param>
/// <param name="error">返回的错误信息</param>
/// <returns></returns>
public bool ZipToFile(string zipName, string fileDirName, out string error)
{
try
{
error = string.Empty;
//读取压缩文件(zip文件),准备解压缩
ZipInputStream s = new ZipInputStream(File.Open(zipName.Trim(), FileMode.Open, FileAccess.Read));
ZipEntry theEntry; string rootDir = " ";
while ((theEntry = s.GetNextEntry()) != null)
{
string path = fileDirName;
//获取该文件在zip中目录
rootDir = Path.GetDirectoryName(theEntry.Name);
//获取文件名称
string fileName = Path.GetFileName(theEntry.Name);
if (string.IsNullOrEmpty(fileName))
continue;
//判断是否为顶层文件,是,将文件直接放在fileDirName下,否,创建目录
if (string.IsNullOrEmpty(rootDir))
{
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
}
else
{
path += "\\" + rootDir;
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
} //将文件流写入对应目录下的文件中
if (fileName != String.Empty)
{
FileStream streamWriter = File.Create(path + "\\" + fileName); int size = ;
byte[] data = new byte[];
while (true)
{
if (theEntry.Size == )
break; size = s.Read(data, , data.Length);
if (size > )
{
streamWriter.Write(data, , size);
}
else
{
break;
}
}
streamWriter.Close();
}
}
s.Close();
return true;
}
catch (Exception ex)
{
error = ex.Message;
return false;
}
}
调用示例
string error;
if (FileToZip(@"E:\文档", "文档.zip", out error))
MessageBox.Show("Succee");
else
MessageBox.Show(error);
压缩示例
string error;
if (ZipToFile(@"E:\文档.zip", "文档", out error))
MessageBox.Show("Succee");
else
MessageBox.Show(error);
解压示例
C# 压缩和解压文件(SharpZipLib)的更多相关文章
- C#压缩和解压文件
这里用两种方法实现C#压缩和解压文件 1.使用System.IO.Compression名称空间下的相关类(需引用 System.IO.Compression.FileSystem和System.IO ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 压缩和解压文件:tar gzip bzip2 compress(转)
tar[必要参数][选择参数][文件] 压缩:tar -czvf filename.tar.gz targetfile解压:tar -zxvf filename.tar.gz参数说明: -c 建立新的 ...
- linux 压缩和解压文件
一.压缩:20120715文件下面所有的文件 如下: tar -zcvf 20120715.tar.gz 20120715* 二.解压20120715.tar.gz压缩包 如下: tar -xzvf ...
- 使用GZipStream压缩和解压文件
最近做了一个用.NET里的GZipStream压缩解压缩gzip文件的小程序. GZipStream在System.IO.Compression底下,使用起来也很简单.虽然GZipStream是Str ...
- c#调用WinRAR软件压缩和解压文件
using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Linq ...
- linux压缩和解压文件命令
tar 解包:tar zxvf filename.tar 打包:tar czvf filename.tar dirnamegz命令 解压1:gunzip filename.gz 解压2:gzi ...
- Android_JarZip压缩和解压文件
本文资料来自<android开发权威指南> AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成. 压缩文件基本步骤: 1.创 ...
- metro压缩和解压文件
在1.zip中增加一张新图片StorageFile jpg = await KnownFolders.PicturesLibrary.GetFileAsync("1.jpg"); ...
随机推荐
- OpenERP财务管理若干概念讲解
来自:http://shine-it.net/index.php/topic,2431.0.html 一.记账凭证(Account Move) 会计上的记账凭证,也叫会计分录,在OpenERP中叫&q ...
- jQuery中.html(“xxx”)和.append("xxx")的区别和不同
append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...
- iOS-仿智联字符图片验证码
概述 随机字符组成的图片验证码, 字符位数可改变, 字符可斜可正排列. 详细 代码下载:http://www.demodashi.com/demo/10850.html 项目中有时候会有这种需求: 获 ...
- Echarts实例
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割
>原理曾经的博客中已经有对meanshift原理的解释,这里就不啰嗦了.国外的资料看这:http://people.csail.mit.edu/sparis/#cvpr07 >源代码 核心 ...
- 【剑指offer】面试题30:最小的K个数
import random def partition(data, start, end): if end <= start: return start index = random.randi ...
- MySQL-安全对调两个表名
我们想要的是同时完成表名对调,如果是先后的对掉,用RENAME的话可能会导致有些数据写入失败,那怎么办? 其实也不难,从MySQL手册里就能找到方法,那就是:同时锁定2个表,不允许写入,然后对调表名. ...
- 【C++】全排列
给定正整数n,求1,2,3,...,n的全排列 解法一:递归,结果并不为字母序排列. void Helper(vector<int> v, int low, int high) { if( ...
- Windows7下搭建Android开发环境
以后工作中要用到android开发,所以想搭建好开发环境,笔记本装的是win7 准备文件: 1 下载Android SDK http://code.google.com/android/downloa ...
- C#:数学运算(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyCo ...