zoukankan      html  css  js  c++  java
  • C# 用 SharpZipLib 压缩解压文件夹

    //在 http://www.icsharpcode.net/ 下载SharpZipLib.dll
    //首先需要在项目里引用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(); 
        } 
      } 
    } 
    
    //现在再来看看解压文件类的源码 
    
      ///   <summary> 
      ///   解压文件 
      ///   </summary> 
    
    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(); 
        } 
      } 
    } 

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

    来自网络

  • 相关阅读:
    Java8新特性学习笔记(一) Lambda表达式
    android游戏动画特效的一些处理
    start from here
    感知机回归
    2020/2/21
    梯度下降
    凸优化
    批量归一化和残差网络
    Momentum
    词嵌入基础
  • 原文地址:https://www.cnblogs.com/yiki/p/1759466.html
Copyright © 2011-2022 走看看