跳到主要內容

zip file

using System;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;

namespace TestUse3
{
 /// <summary>
 /// ZipClass 的摘要描述。
 /// </summary>
 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();
  }
 }


}



------------------------------------------------------------------------------------------------------------
private void Button1_Click(object sender, System.EventArgs e)  //壓縮
  {
   string[] FileProperties = new string[2];
   FileProperties[0] = "C:\\unzipped\\";  //待壓縮文件目錄
   FileProperties[1] = "C:\\zip\\a.zip";  //壓縮後的目標文件
   ZipClass Zc = new ZipClass();    //調用Zip class
   Zc.ZipFileMain(FileProperties);

  }