使用SharpZipLib制作压缩解压缩程序

原创 2007年09月14日 02:06:00

晚上没啥事,看到一个SharpZipLib,挺不错,拿来做一个小的压缩解压缩程序 。

SharpZipLib是一个用C#写的支持Zip、GZip、Tar、BZip2等格式的压缩库。是开源的,这里是它的网址:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx

我做一个很小的压缩解压缩程序,支持Zip的压缩与解压缩,并且在压缩解压缩时使用单独的线程,以免造成界面假死。

下载地址:http://www.5huan.cn/sth/ZipTest.zip


小的压缩解压缩程序

压缩解压缩都要使用FileStream类作为输入输出,然后使用SharpZipLib的ZipInputStream、ZipOutputStream两个类。ZipInputStream用于把压缩的数据解压成正常的数据, ZipOutputStream则用于把正常的数据压缩。还有一个类是ZipEntry,他是压缩文件中的每个项,我这里为了简化每个压缩文件中只包含了一个。

这个是压缩的方法:

public static void Zip(string SrcFile, string DstFile, int BufferSize)
{
            FileStream fileStreamIn 
= new FileStream(SrcFile, FileMode.Open, FileAccess.Read);
            FileStream fileStreamOut 
= new FileStream(DstFile, FileMode.Create, FileAccess.Write);
            ZipOutputStream zipOutStream 
= new ZipOutputStream(fileStreamOut);

            
byte[] buffer = new byte[BufferSize];

            ZipEntry entry 
= new ZipEntry(Path.GetFileName(SrcFile));
            zipOutStream.PutNextEntry(entry);

            
int size;
            
do
            
{
                size 
= fileStreamIn.Read(buffer, 0, buffer.Length);
                zipOutStream.Write(buffer, 
0, size);
            }
 while (size > 0);

            zipOutStream.Close();
            fileStreamOut.Close();
            fileStreamIn.Close();

}

解压缩的方法:

public static void UnZip(string SrcFile, string DstFile, int BufferSize)
{
            FileStream fileStreamIn 
= new FileStream(SrcFile, FileMode.Open, FileAccess.Read);
            ZipInputStream zipInStream 
= new ZipInputStream(fileStreamIn);
            ZipEntry entry 
= zipInStream.GetNextEntry();
            FileStream fileStreamOut 
= new FileStream(DstFile + @"" + entry.Name, FileMode.Create, FileAccess.Write);

            
int size;
            
byte[] buffer = new byte[BufferSize];
            
do
            
{
                size 
= zipInStream.Read(buffer, 0, buffer.Length);
                fileStreamOut.Write(buffer, 
0, size);
            }
 while (size > 0);

            zipInStream.Close();
            fileStreamOut.Close();
            fileStreamIn.Close();

}

经测试,效果还不错,处理大文件时就慢些,所以在界面上使用了新建一个线程来执行压缩和解压缩,以免界面出现假死。

csdn怎么上传文件呢?

相关文章推荐

【c#】SharpZipLib使用,解压缩zip文件至指定文件夹内(包含文件夹解压缩)

最近在检查以前写过的代码的时候,偶然间发现了一个解压缩的问题: 当初为了方便,在网上查了几个解压缩的代码之后,将使用最多的代码直接copy过来用了,但是今天却发现解压缩的算法是有问题的,具体的问题代...

C#+ICSharpCode.SharpZipLib.dll实现压缩解压缩功能

注意事项:需要下载最新版本的dll。现在用的是86版本的dll public class ZipClass     {         public static int avg = 1024 ...

.Net 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩(改进)

对原有代码的改进,完善了功能1.增加了压缩文件夹,解压缩文件夹的功能2.解压缩文件时,对目标文件的目录检查,没有则创建 代码如下:using System;using System.Data;usin...

使用SharpZipLib压缩打包多个内存中的文件

SharpZipLib是C#写的开源压缩解压缩组件,最近项目上遇到一个需求:根据用户选择的项目生成CSV文件并下载,后来改为同时生成2个CSV文件下载下来。想到的解决办法就是将2个CSV文件打包成一个...
  • studyzy
  • studyzy
  • 2013年09月10日 14:23
  • 980

c#使用SharpZipLib压缩和解压缩文件

本文是在其他人基础上修改而来,测试过程: 正常zip方式压缩文件,然后用wrar工具可以解压出来(开始用wrar3.4版本的怎么也解不出来,以为是不支持wrar解压,后来改用3.9及4.11版本可以...

C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件

原因: 最近做一个公司项目,点击导出想把各自报告书及请求箱单导出存为Excel,由于是客户端操作试了各种方法都不适合,并且由于文件较多,导出时需要每个文件单独另存成,这样导致请求后台数据流量较大,而...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用SharpZipLib制作压缩解压缩程序
举报原因:
原因补充:

(最多只允许输入30个字)