当前位置: 首页 >> 程序设计 >> C#压缩与解压缩编程
 

C#压缩与解压缩编程

作者:      来源:zz     发表时间:2006-10-30     浏览次数:      字号:    

using System;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
namespace MyWinzip
{
 
/// 
 
/// Class1 的摘要说明。
 
/// 
 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();
  }

 }
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •