C#利用sharpziplib的方法浅析

开发 后端
这里介绍C#利用sharpziplib,其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让首次接触压缩和解压缩的朋友可以少走些弯路。

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();   }   }   }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.

【编辑推荐】

  1. C#字符ASCII码学习经验
  2. C#数值类型之间的转换概述
  3. 日期型数据转换成C#长整型数据
  4. C#查看Excel对象模型分析
  5. C#日期型数据简单剖析
责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-09-01 09:16:57

C#使用SharpZi

2009-08-20 16:15:19

C# 匿名方法

2009-09-10 14:52:55

C# get

2009-08-10 17:36:17

C#扩展方法

2009-09-11 09:15:06

C# get方法

2009-09-07 09:36:29

C# DisposeDispose方法

2009-08-17 17:56:32

C# 枚举

2009-09-10 09:10:17

C# TextBox换

2009-09-07 09:53:01

C# DisposeDispose方法

2009-08-14 16:02:50

C#启动windows

2009-09-18 10:58:31

C#数组操作

2009-08-12 17:27:11

C#读取文件

2009-08-28 12:19:19

C#静态方法

2009-08-20 10:53:23

C#操作内存

2009-09-11 09:20:00

C# button事件

2009-08-28 16:31:21

C# treeview

2009-09-18 19:09:41

C# COM组件

2009-09-08 14:54:40

C# listBox控

2009-09-08 16:22:27

c# listBox

2009-09-15 15:40:25

C# 绑定
点赞
收藏

51CTO技术栈公众号