关闭

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

822人阅读 评论(0) 收藏 举报

晚上没啥事,看到一个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怎么上传文件呢?

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24423次
    • 积分:387
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:6篇
    • 译文:4篇
    • 评论:9条
    文章分类
    最新评论