晚上没啥事,看到一个SharpZipLib,挺不错,拿来做一个小的压缩解压缩程序 。
SharpZipLib是一个用C#写的支持Zip、GZip、Tar、BZip2等格式的压缩库。是开源的,这里是它的网址:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
我做一个很小的压缩解压缩程序,支持Zip的压缩与解压缩,并且在压缩解压缩时使用单独的线程,以免造成界面假死。
下载地址:http://www.5huan.cn/sth/ZipTest.zip
![](https://p-blog.csdn.net/images/p_blog_csdn_net/flankerfc/yasuo.jpg)
小的压缩解压缩程序
压缩解压缩都要使用FileStream类作为输入输出,然后使用SharpZipLib的ZipInputStream、ZipOutputStream两个类。ZipInputStream用于把压缩的数据解压成正常的数据, ZipOutputStream则用于把正常的数据压缩。还有一个类是ZipEntry,他是压缩文件中的每个项,我这里为了简化每个压缩文件中只包含了一个。
这个是压缩的方法:
public
static
void
Zip(
string
SrcFile,
string
DstFile,
int
BufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
FileStream fileStreamIn = new FileStream(SrcFile, FileMode.Open, FileAccess.Read);
FileStream fileStreamOut = new FileStream(DstFile, FileMode.Create, FileAccess.Write);
ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
byte[] buffer = new byte[BufferSize];
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
ZipEntry entry = new ZipEntry(Path.GetFileName(SrcFile));
zipOutStream.PutNextEntry(entry);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
int size;
do
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
size = fileStreamIn.Read(buffer, 0, buffer.Length);
zipOutStream.Write(buffer, 0, size);
} while (size > 0);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
zipOutStream.Close();
fileStreamOut.Close();
fileStreamIn.Close();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
解压缩的方法:
public
static
void
UnZip(
string
SrcFile,
string
DstFile,
int
BufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
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);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
int size;
byte[] buffer = new byte[BufferSize];
do
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
size = zipInStream.Read(buffer, 0, buffer.Length);
fileStreamOut.Write(buffer, 0, size);
} while (size > 0);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
zipInStream.Close();
fileStreamOut.Close();
fileStreamIn.Close();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
经测试,效果还不错,处理大文件时就慢些,所以在界面上使用了新建一个线程来执行压缩和解压缩,以免界面出现假死。
csdn怎么上传文件呢?