<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在C#中使用SharpZipLib進行文件的壓縮與解壓縮

      [摘要]我在做項目的時候需要將文件進行壓縮和解壓縮,于是就從http://www.icsharpcode.net下載了關于壓縮和解壓縮的源碼,但是下載下來后,面對這么多的代碼,一時不知如何下手。只好耐下心來,慢慢的研究,總算找到了門路。針對自己的需要改寫了文件壓縮和解壓縮的兩個類,分別為ZipClass和...

          我在做項目的時候需要將文件進行壓縮和解壓縮,于是就從http://www.icsharpcode.net下載了關于壓縮和解壓縮的源碼,但是下載下來后,面對這么多的代碼,一時不知如何下手。只好耐下心來,慢慢的研究,總算找到了門路。針對自己的需要改寫了文件壓縮和解壓縮的兩個類,分別為ZipClass和UnZipClass。其中碰到了不少困難,就決定寫出來壓縮和解壓的程序后,一定把源碼貼出來共享,讓首次接觸壓縮和解壓縮的朋友可以少走些彎路。下面就來解釋如何在C#里用http://www.icsharpcode.net下載的SharpZipLib進行文件的壓縮和解壓縮。

          首先需要在項目里引用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();
        }
       }
      }

          有了壓縮和解壓縮的類以后,就要在窗體里調用了。怎么?是新手,不會調用?Ok,接著往下看如何在窗體里調用。

          首先在窗體里放置兩個命令按鈕(不要告訴我你不會放啊~),然后編寫以下源碼

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

          好了,到此為止,如何壓縮和解壓縮的類都已經完成了,需要的朋友直接拿走調吧。




      日韩精品一区二区三区高清