先从网上下载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)的更多相关文章

  1. C#压缩和解压文件

    这里用两种方法实现C#压缩和解压文件 1.使用System.IO.Compression名称空间下的相关类(需引用 System.IO.Compression.FileSystem和System.IO ...

  2. 【转】Java压缩和解压文件工具类ZipUtil

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. 压缩和解压文件:tar gzip bzip2 compress(转)

    tar[必要参数][选择参数][文件] 压缩:tar -czvf filename.tar.gz targetfile解压:tar -zxvf filename.tar.gz参数说明: -c 建立新的 ...

  4. linux 压缩和解压文件

    一.压缩:20120715文件下面所有的文件 如下: tar -zcvf 20120715.tar.gz  20120715* 二.解压20120715.tar.gz压缩包 如下: tar -xzvf ...

  5. 使用GZipStream压缩和解压文件

    最近做了一个用.NET里的GZipStream压缩解压缩gzip文件的小程序. GZipStream在System.IO.Compression底下,使用起来也很简单.虽然GZipStream是Str ...

  6. c#调用WinRAR软件压缩和解压文件

    using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Linq ...

  7. linux压缩和解压文件命令

    tar  解包:tar zxvf filename.tar  打包:tar czvf filename.tar dirnamegz命令  解压1:gunzip filename.gz  解压2:gzi ...

  8. Android_JarZip压缩和解压文件

        本文资料来自<android开发权威指南> AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成. 压缩文件基本步骤: 1.创 ...

  9. metro压缩和解压文件

    在1.zip中增加一张新图片StorageFile jpg = await KnownFolders.PicturesLibrary.GetFileAsync("1.jpg"); ...

随机推荐

  1. WebApi2 知识点总结

    1.建议使用异步接口async Task<> public async Task<IHttpActionResult> Get() 如果返回的是IEnumerable请使用: ...

  2. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

  3. 【Oracle】Oracle常用语句集合

    表相关 1.快速统计大表记录数 select table_name, t.num_rows, t.last_analyzed  from tabs t WHERE table_name='TABLE_ ...

  4. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  5. IOS+openCV在Xcode的入门开发(转)

    看这篇文章之前先看看这个地址:OpenCV iOS开发(一)——安装 昨天折腾了一天,终于搞定了openCV+IOS在Xcode下的环境并且实现一个基于霍夫算法的圆形识别程序.废话不多说,下面就是具体 ...

  6. 如何通过numpy获得二维或多维数组的最大、小值索引

    虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引.那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码: impor ...

  7. zoj 2921 Stock(贪心)

    Optiver sponsored problem. After years of hard work Optiver has developed a mathematical model that ...

  8. REST开放接口生成文档工具之apidoc

    一.安装node.js环境 感谢阿里云,下载的链接http://npm.taobao.org/mirrors/node/latest-v6.x/ 二.安装apidoc npm install apid ...

  9. 权限管理系统(四):RBAC权限模型分类介绍

    RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构 ...

  10. Murano环境搭建、使用介绍和思考

      murano是OpenStack的Application Catalog服务.推崇AaaS(Anything-as-a-Service)的概念.通过统一的框架和API实现应用程序高速部署和应用程序 ...