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