当前位置:中国站长下载文章中心网页编程.NET编程 → 用ASP.Net实现文件的在线压缩和解压缩(3)

用ASP.Net实现文件的在线压缩和解压缩(3)

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 8:33:32
     // ----------------------------------------------
  // 3. ZipClass.cs
  // ----------------------------------------------
  using System;
  using System.IO;
  using ICSharpCode.SharpZipLib.Zip;
  using ICSharpCode.SharpZipLib.GZip;
  using ICSharpCode.SharpZipLib.BZip2;
  using ICSharpCode.SharpZipLib.Checksums;
  using ICSharpCode.SharpZipLib.Zip.Compression;
  using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
  
  namespace WebZipUnzip
  {
   /// <summary>
   /// 压缩文件
   /// </summary>
   public class ZipClass
   {
   public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
   {
   //如果文件没有找到,则报错
   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]);
   string[] filenames = new string[]{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();
   }
   }
  }  做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。