All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SQL Server2000安全管理机制详解_[SQL Server教程]
ASP.NET无限级分类的非递归实现(存储过程版)_[Asp.Net教程]
开发环境下优化SQl语句的十个重要步骤_mssql学习_编程技术
ASP.NET中Session的状态保持方式浅议_.net资料_编程技术
根据主键,合并gridview的行_[Asp.Net教程]
Delphi执行sql server普通查询
用PHP实现Ftp用户的在线管理_[PHP教程]
ASP.NET中用哪种方式表格化数据_[Asp.Net教程]
C#教程:套接字使用实例
PHP配置链接access数据库_[PHP教程]
Reading number is top 10 pictures
再来随便发几张
赵惟依写真3
擦地板的大叔太好了
全球十大灵异酒店
邪恶搞笑内涵图
海底兵马俑
银行20年后可能消失
男人巳快沦落成动物了
NeedWallpaper3
美女浴室写真1
Download software ranking
致我们终将逝去的青春
豪门浪荡史
Tram sex maniac 2 (H) rar bag11
Kung.Fu.Panda.2
C++教程第四版
Eclipse-CALMSANNY (second edition)
White deer villiage
Tram sex maniac 2 (H) rar bag16
艳兽都市
塘西风月痕
delv published in(发表于) 2014/1/6 9:06:08 Edit(编辑)
C#中利用SharpZipLib进行压缩和解压_[Asp.Net教程]

C#中利用SharpZipLib进行压缩和解压_[Asp.Net教程]

C#中利用SharpZipLib进行压缩和解压_[Asp.Net教程]

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

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


///


/// 压缩文件
///


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();
}
}
}


  现在再来看看解压文件类的源码


///


/// 解压文件
///


using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;


using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using ICSharpCode.SharpZipLib.GZip;


namespace DeCompression
{
public class UnZipClass
{
public void UnZip(string[] args)
{
ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));


zipentry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{


string directoryName = Path.GetDirectoryName(args[1]);
string fileName = Path.GetFileName(theEntry.Name);


//生成解压目录
Directory.CreateDirectory(directoryName);


if (fileName != String.Empty)
{
//解压文件到指定的目录
FileStream streamWriter = File.Create(args[1]+theEntry.Name);


int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}


streamwriter.close();
}
}
s.Close();
}
}
}


  有了压缩和解压缩的类以后,就要在窗体里调用了。怎么?是新手,不会调用?ok,接着往下看如何在窗体里调用。


  首先在窗体里放置两个命令按钮(不要告诉我你不会放啊~),然后编写以下源码


///


/// 调用源码
///


private void button2_Click_1(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:\\unzipped\\";//待压缩文件目录
FileProperties[1]="C:\\zip\\a.zip"; //压缩后的目标文件
ZipClass Zc=new ZipClass();
Zc.ZipFileMain(FileProperties);
}


private void button2_Click(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:\\zip\\test.zip";//待解压的文件
FileProperties[1]="C:\\unzipped\\";//解压后放置的目标目录
UnZipClass UnZc=new UnZipClass();
UnZc.UnZip(FileProperties);
}


  好了,到此为止,如何压缩和解压缩的类都已经完成了,需要的朋友直接拿走调吧。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.