c#压缩文件

C#之压缩文件
2007年03月23日 星期五 18:00

使用
ICSharpCode.SharpZipLib.dll
下载地址:
http://www.icsharpcode.net/OpenSource/SharpZipLib/

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


代码:
压缩到文件

    private void btnZip_Click(object sender, System.EventArgs e)
    {
     string filename;
     ZipOutputStream zos;
     FileStream fs;

     Crc32 crc = new Crc32();

     OpenFileDialog openfileDialog = new OpenFileDialog();

     //openfileDialog.InitialDirectory = "c:\\" ;
     openfileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
     openfileDialog.FilterIndex = 2 ;
     openfileDialog.RestoreDirectory = false ;

     if(openfileDialog.ShowDialog() == DialogResult.OK)
     {
      filename = Path.GetFileName(openfileDialog.FileName);

      zos = new ZipOutputStream(File.Create(filename + ".zip"));

      zos.SetLevel(6);

      fs = File.OpenRead(filename);

      byte[] buffer = new byte[fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      this.richTextBox1.Text=Encoding.UTF8.GetString(buffer);
      ZipEntry entry = new ZipEntry(filename);
   
      entry.DateTime = DateTime.Now;
      entry.Size = fs.Length;

      fs.Close();

      crc.Reset();
      crc.Update(buffer);
   
      entry.Crc    = crc.Value;
   
      zos.PutNextEntry(entry);
   
      zos.Write(buffer, 0, buffer.Length);

      zos.Finish();
      zos.Close();
     }
    }
压缩到内存

    private void btnZipOneText_Click(object sender, System.EventArgs e)
    {
     msFileIn = new MemoryStream();

     //this.statusBarPanel1.Text="正在压缩编码第一个文本框里的数据 ... ...";
     byte[] getchr = Encoding.UTF8.GetBytes(this.richTextBox1.Text.ToString());

     ZipOutputStream zos = new ZipOutputStream(msFileIn);
     zos.SetLevel(6);
     ZipEntry entry = new ZipEntry("Stream");
     Crc32 crc = new Crc32();
     crc.Reset();
     crc.Update(getchr);
     entry.Crc    = crc.Value;
     entry.DateTime = DateTime.Now;
     entry.Size = getchr.Length;
     zos.PutNextEntry(entry);

     zos.Write(getchr,0,getchr.Length);

     zos.Finish();
     zos.Close();

     MessageBox.Show("压缩完成,结果存入内存!");
     //this.statusBarPanel1.Text = "第一个文本框里的数据压缩完成。";
    }
解压文件
    private void btnUnZip_Click(object sender, System.EventArgs e)
    {
     string filename;

     OpenFileDialog openfileDialog = new OpenFileDialog();

     //openfileDialog.InitialDirectory = "c:\\" ;
     openfileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
     openfileDialog.FilterIndex = 2 ;
     openfileDialog.RestoreDirectory = false ;

     if(openfileDialog.ShowDialog() == DialogResult.OK)
     {
      filename = Path.GetFileName(openfileDialog.FileName);

      ZipInputStream zis = new ZipInputStream(File.OpenRead(filename));
  
      ZipEntry theEntry;
      while ((theEntry = zis.GetNextEntry()) != null)
      {
       //string directoryName = Path.GetDirectoryName(theEntry.Name);
       //Directory.CreateDirectory(directoryName);

       string fileName = Path.GetFileName(theEntry.Name);

       if (fileName != String.Empty)
       {
        FileStream streamWriter = File.Create(theEntry.Name);
    
        int size = 2048;
        byte[] data = new byte[2048];
        while (true)
        {
         size = zis.Read(data, 0, data.Length);
         if (size > 0)
         {
          streamWriter.Write(data, 0, size);
         }
         else
         {
          break;
         }
        }
    
        streamWriter.Close();
       }
      }
      zis.Close();
     }
   
    }

from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=296861

II------------------no2

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

}
}

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 MyWinzip
{
///


/// Class1 的摘要说明。
///
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)
     {   
      //解压文件到指定的目录
      string path=args[1]+"\\"+theEntry.Name;
      FileStream streamWriter = File.Create(path);
    
      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();
   }


}
}

新建MyWinzip工程,引用SharpZipLib.dll ,然后添加UnZipClass.cs 和ZipClass.cs

编译成MyWinzip.dll,即可使用.

using MyWinzip;

private void button1_Click(object sender, System.EventArgs e)
   {
    this.openFileDialog1.ShowDialog();
             string filename=this.openFileDialog1.FileName;//待解压的文件
    int i=filename.LastIndexOf(".");
    string filepath=filename.Substring(0,i)+"\\";                  //解压后放置的目标目录

    string []FileProperties=new string[2];
    FileProperties[0]=filename;
    FileProperties[1]=filepath;
    UnZipClass UnZc=new UnZipClass();
    UnZc.UnZip(FileProperties);

   }

将*.dll文件解压到指定目录,将*.txt文件内容(xml)读取.

private void Button2_Click(object sender, System.EventArgs e)
   {
    try
    {
    
     string filename=upload.PostedFile.FileName;//待解压的文件
     string unzippath="c:\inetpub\wwwroot\maxservice\dll\handle\";//解压后放置的目标目录
     if(filename!=String.Empty)
     {
      string []FileProperties=new string[2];
      FileProperties[0]=filename;
      FileProperties[1]=unzippath;
      UnZipClass UnZc=new UnZipClass();
      UnZc.UnZip(FileProperties);
      if(UnZc.XmlString!=String.Empty )
      {
         bool success=this.DecodeXml(UnZc.XmlString);//子定义方法,解析zip文件中txt文件内容(xml.)
         if(success)
          this.Label1.Text="上载成功.";
       else
          this.Label1.Text="上载失败.";
      }

     }
    }
    catch(Exception ex)
    {
     throw new Exception(ex.Message);
    }
   }



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=324379

posted @ 2011-09-27 11:42  从头儿再来  阅读(365)  评论(0)    收藏  举报