网站模板制作流程网站快速排名优化
真是折腾呀,网上虽然有不少的源码但测试几个就是不成功,经过折腾还是折腾出来了现在分享出来给大家。
源码还是在网友们的基础上调整的,主要是调整源码大大小写格式。
sharpziplib.dll 下载:http://pan.baidu.com/share/link?shareid=1016448925&uk=134565274&fid=3214033513
首先需要在项目里引用sharpziplib.dll
ZipClass.cs 类函数 包括压缩和解压
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;
using ICSharpCode.SharpZipLib.Checksums;
namespace Updatezip
{#region 压缩文件类/// <summary>/// 压缩文件 /// </summary>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();}}
#endregion#region 解压文件类/// <summary>/// 解压文件/// </summary>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();}}
#endregion
}
调用方法
/// <summary>
/// 调用源码
/// </summary>
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);
}