(一分钟搞定)C#压缩与解压缩

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

 }
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值