C# 压缩和解压文件(SharpZipLib)

先从网上下载ICSharpCode.SharpZipLib.dll类库

将文件或文件夹压缩为zip,函数如下

 1         /// <summary>
 2         /// 压缩文件
 3         /// </summary>
 4         /// <param name="fileName">压缩文件路径</param>
 5         /// <param name="zipName">压缩的文件名称</param>
 6         /// <param name="error">返回的错误信息</param>
 7         /// <returns></returns>
 8         public bool FileToZip(string fileName, string zipName, out string error)
 9         {
10             error = string.Empty;
11             try
12             {
13                 ZipOutputStream s = new ZipOutputStream(File.Create(zipName));
14                 s.SetLevel(6); // 0 - store only to 9 - means best compression
15                 zip(fileName, s);
16                 s.Finish();
17                 s.Close();
18                 return true;
19             }
20             catch (Exception ex)
21             {
22                 error = ex.Message;
23                 return false;
24             }
25         }
26
27
28         private void zip(string fileName, ZipOutputStream s)
29         {
30             if (fileName[fileName.Length - 1] != Path.DirectorySeparatorChar)
31                 fileName += Path.DirectorySeparatorChar;
32             Crc32 crc = new Crc32();
33             string[] filenames = Directory.GetFileSystemEntries(fileName);
34             foreach (string file in filenames)
35             {
36                 if (Directory.Exists(file))
37                 {
38                     zip(file, s);
39                 }
40                 else // 否则直接压缩文件
41                 {
42                     //打开压缩文件
43                     FileStream fs = File.OpenRead(file);
44
45                     byte[] buffer = new byte[fs.Length];
46                     fs.Read(buffer, 0, buffer.Length);
47                     string tempfile = Path.GetFileName(file);
48                     ZipEntry entry = new ZipEntry(tempfile);
49
50                     entry.DateTime = DateTime.Now;
51                     entry.Size = fs.Length;
52                     fs.Close();
53                     crc.Reset();
54                     crc.Update(buffer);
55                     entry.Crc = crc.Value;
56                     s.PutNextEntry(entry);
57
58                     s.Write(buffer, 0, buffer.Length);
59                 }
60             }
61         }

将zip解压为文件或文件夹,函数代码如下

 1         /// <summary>
 2         /// 解压文件
 3         /// </summary>
 4         /// <param name="zipName">解压文件路径</param>
 5         /// <param name="fileDirName">解压到文件夹的名称</param>
 6         /// <param name="error">返回的错误信息</param>
 7         /// <returns></returns>
 8         public bool ZipToFile(string zipName, string fileDirName, out string error)
 9         {
10             try
11             {
12                 error = string.Empty;
13                 //读取压缩文件(zip文件),准备解压缩
14                 ZipInputStream s = new ZipInputStream(File.Open(zipName.Trim(), FileMode.Open, FileAccess.Read));
15                 ZipEntry theEntry;
16
17                 string rootDir = " ";
18                 while ((theEntry = s.GetNextEntry()) != null)
19                 {
20                     string path = fileDirName;
21                     //获取该文件在zip中目录
22                     rootDir = Path.GetDirectoryName(theEntry.Name);
23                     //获取文件名称
24                     string fileName = Path.GetFileName(theEntry.Name);
25                     if (string.IsNullOrEmpty(fileName))
26                         continue;
27                     //判断是否为顶层文件,是,将文件直接放在fileDirName下,否,创建目录
28                     if (string.IsNullOrEmpty(rootDir))
29                     {
30                         if (!Directory.Exists(path))
31                             Directory.CreateDirectory(path);
32                     }
33                     else
34                     {
35                         path += "\\" + rootDir;
36                         if (!Directory.Exists(path))
37                             Directory.CreateDirectory(path);
38                     }
39
40                     //将文件流写入对应目录下的文件中
41                     if (fileName != String.Empty)
42                     {
43                         FileStream streamWriter = File.Create(path + "\\" + fileName);
44
45                         int size = 2048;
46                         byte[] data = new byte[2048];
47                         while (true)
48                         {
49                             if (theEntry.Size == 0)
50                                 break;
51
52                             size = s.Read(data, 0, data.Length);
53                             if (size > 0)
54                             {
55                                 streamWriter.Write(data, 0, size);
56                             }
57                             else
58                             {
59                                 break;
60                             }
61                         }
62                         streamWriter.Close();
63                     }
64                 }
65                 s.Close();
66                 return true;
67             }
68             catch (Exception ex)
69             {
70                 error = ex.Message;
71                 return false;
72             }
73         }

调用示例

1 string error;
2             if (FileToZip(@"E:\文档", "文档.zip", out error))
3                 MessageBox.Show("Succee");
4             else
5                 MessageBox.Show(error);

压缩示例

1 string error;
2             if (ZipToFile(@"E:\文档.zip", "文档", out error))
3                 MessageBox.Show("Succee");
4             else
5                 MessageBox.Show(error);

解压示例

时间: 2024-11-08 14:20:24

C# 压缩和解压文件(SharpZipLib)的相关文章

Linux tar(用来压缩和解压文件)

通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案.利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便

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

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 package com.utility.zip; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import jav

Android_JarZip压缩和解压文件

本文资料来自<android开发权威指南> AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成. 压缩文件基本步骤: 1.创建一个JarOutputStream或ZipOutputStream对象,分别用来生成jar或zip文件. 2.创建了(jar|zip)OutputStream对象,还不能直接向输出流写入数据.由于压缩文件也需要使用文件名和路径来标识被压缩的文 件,因此,需要为每一个要压缩的文件创建一个JarEntry或ZipEnt

使用GZipStream压缩和解压文件

最近做了一个用.NET里的GZipStream压缩解压缩gzip文件的小程序. GZipStream在System.IO.Compression底下,使用起来也很简单.虽然GZipStream是Stream类的一个下级类,但它只相当于一个转换器.在两个Stream之间将数据转换成为压缩或解压缩数据. 下面是一个简单的例子: static void Main(string[] args) { string inputFileName = @"TestFile/Test.doc"; str

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

tar[必要参数][选择参数][文件] 压缩:tar -czvf filename.tar.gz targetfile解压:tar -zxvf filename.tar.gz参数说明: -c 建立新的压缩文件 -z 支持gzip解压文件 -x 从压缩的文件中提取文件 -v 显示操作过程 -f 指定压缩文件 -t 显示压缩文件的内容 gzip[必要参数][选择参数][文件或者目录] 压缩: gzip filename/*   (*号表示当前目录中的所有文件/目录分别进行压缩)解压: gzip -d

linux 压缩和解压文件(.gz\.bz2)

gzip 压缩指定文件(.gz) gzip test -c[可选参数] 压缩到指定的文件 gzip -c test > test.gz -r[可选参数] 递归压缩文件 gzip -r /usr/test 压缩目录下的所有文件 gzip /tmp/* gzip 解压指定文件(.gz) gzip -d test.gz 解压目录下的所有文件 gzip -d /usr/test/* gunzip 解压指定文件(.gz) gunzip test.gz bzip2 压缩指定文件(.bz2) bzip2 te

C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)

我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib.dll 支持库 第二步:创建一个压缩和解压的demo项目 第三步:查看压缩和解压的文件的结果 二.demo演示(包括源码和界面) 1.下载文件压缩和解压的支持库dll ,下载地址:http://pan.baidu.com/s/1pLausnL 2.创建window创建项目 1) 添加引用(文件压缩

.net文件压缩和解压及中文文件夹名称乱码问题

/**************************注释区域内为引用http://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html的博客内容 在.NET可以通过多种方式实现zip的压缩和解压:1.使用System.IO.Packaging:2.使用第三方类库:3.通过 System.IO.Compression 命名空间中新增的ZipArchive.ZipFile等类实现. 一.使用System.IO.Packaging压缩和解压

C#对文件操作(基本的读写以及压缩和解压)

主要是针对单个文件进行读写操作和压缩操作:用到的主要C#类有FileStream.FileInfo.StreamWrite.StreamRead.GZipStream. 字符数组和字节数组的转换: 1 byte[] bytedata = new byte[200]; 2 char[] chardata = new char[200]; 3 try 4 { 5 FileStream fs = new FileStream("App.config", FileMode.Open); 6 f