先从网上下载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. windows合并文件夹窗口

      windows合并文件夹窗口 CreateTime--2017年7月26日16:28:14Author:Marydon 右击任务栏-->属性-->任务栏按钮选项-->选择“始终合 ...

  2. HDU 2647--Reward【拓扑排序】

    Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. MySQL实现允许远程用户登录(使用Navicat for MySQL工具)

    一.方式一和方式二都可以,建议方式二. 前提条件:在服务器上将MySQL的配置文件 /etc/mysql/my.cnf中使用: sudo vi /etc/mysql/my.cnf 找到bind-add ...

  4. 查询MYSQl数据表中的最后一条记录

    mysql: select * from table order by id DESC limit 1 oracle: select * from emp where id in (select ma ...

  5. Ubuntu分区方案归总

     更新时间:2010-8-26   一.各文件及文件夹的定义 /bin:bin是binary(二进制)的缩写.存放必要的命令  存放增加的用户程序. /bin分区,存放标准系统实用程序. /boot: ...

  6. fatal error LNK1123: 转换到 COFF 期间失败:文件无效或损坏

    问题出现背景: 原本电脑里是装着VS2015的,其使用的是.NET 4.5,当再安装VS2010之后,不能与当前的.NET平台兼容.卸载VS2015时,不会恢复.NET 4.0. l 当VS2015安 ...

  7. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  8. NPM 模块收集

    cross-env https://www.npmjs.com/package/cross-env 在package.json设置环境变量的时候,会有兼容性问题,如: { "scripts& ...

  9. vue组件调用(用npm安装)

    vue用webpack打包方式新建项目,注意刚开始可以先关闭路由和代码错误检测功能 1.建立了一个Hi.vue的组件 <template> <div>Hi~~{{msg}}-- ...

  10. java开发常用到的jar包总结

    commons-io.jar: FileUtils 读取文件所有行 File file = new File("c:\\123.txt"); List<String> ...