WEB开发网
开发学院软件开发C语言 C#利用sharpziplib的方法浅析 阅读

C#利用sharpziplib的方法浅析

 2010-09-30 20:51:16 来源:WEB开发网   
核心提示:C#语言有很多值得学习的地方,这里我们主要介绍C#利用sharpziplib,C#利用sharpziplib的方法浅析,包括介绍压缩和解压缩的两个类,分别为 ZipClass和UnZipClass等方面,首先需要在项目里C#利用sharpziplib.dll,然后修改其中的关于压缩和解压缩的类,在做项目的时候需要将文件

C#语言有很多值得学习的地方,这里我们主要介绍C#利用sharpziplib,包括介绍压缩和解压缩的两个类,分别为 ZipClass和UnZipClass等方面。

在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手。只好耐下心来,慢慢的研究,总算找到了门路。针对自己的需要改写了文件压缩和解压缩的两个类,分别为 ZipClass和UnZipClass。其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让首次接触压缩和解压缩的朋友可以少走些弯路。下面就来解释如何C#利用sharpziplib进行文件的压缩和解压缩。

首先需要在项目里C#利用sharpziplib.dll。然后修改其中的关于压缩和解压缩的类。实现源码如下:

/// 
<summary>
 
/// 压缩文件  
/// 
</summary>
 
 
using System;  
using System.IO;  
 
using ICSharpCode.SharpZipLib.Checksums;  
using ICSharpCode.SharpZipLib.Zip;  
using ICSharpCode.SharpZipLib.GZip;  
 
namespace Compression  
{  
public class ZipClass  
{  
 
public void ZipFile(string FileToZip, string ZipedFile ,
int CompressionLevel, int BlockSize)  
{  
//如果文件没有找到,则报错  
if (! System.IO.File.Exists(FileToZip))  
{  
throw new System.IO.FileNotFoundException
("The specified file " + FileToZip + " could not be found. Zipping aborderd");  
}  
 
system.io.filestream StreamToZip = new System.IO.FileStream
(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);  
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);  
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);  
ZipEntry ZipEntry = new ZipEntry("ZippedFile");  
ZipStream.PutNextEntry(ZipEntry);  
ZipStream.SetLevel(CompressionLevel);  
byte[] buffer = new byte[BlockSize];  
System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);  
ZipStream.Write(buffer,0,size);  
try  
{  
while (size 
<
 
StreamToZip.Length
)  
{  
int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);  
ZipStream.Write(buffer,0,sizeRead);  
size += sizeRead;  
}  
}  
catch(System.Exception ex)  
{  
throw ex;  
}  
ZipStream.Finish();  
ZipStream.Close();  
StreamToZip.Close();  
}  
 
public void ZipFileMain(string[] args)  
{  
string[] filenames = Directory.GetFiles(args[0]);  
 
crc32 crc = new Crc32();  
ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));  
 
s.setlevel(6); // 0 - store only to 9 - means best compression  
 
foreach (string file in filenames)  
{  
//打开压缩文件  
FileStream fs = File.OpenRead(file);  
 
byte[] buffer = new byte[fs.Length];  
fs.Read(buffer, 0, buffer.Length);  
ZipEntry entry = new ZipEntry(file);  
 
entry.datetime = DateTime.Now;  
 
// set Size and the crc, because the information  
// about the size and crc should be stored in the header  
// if it is not set it is automatically written in the footer.  
// (in this case size == crc == -1 in the header)  
// Some ZIP programs have problems with zip files that don't store  
// the size and crc in the header.  
entry.Size = fs.Length;  
fs.Close();  
 
crc.reset();  
crc.Update(buffer);  
 
entry.crc = crc.Value;  
 
s.putnextentry(entry);  
 
s.write(buffer, 0, buffer.Length);  
 
}  
 
s.finish();  
s.Close();  
}  
}  
}  

Tags:利用 sharpziplib 方法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接