压缩和解压缩

原创 2004年08月24日 19:26:00

(SharpZipLib.dll)http://www.icsharpcode.net/

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

linux常用的压缩与解压缩命令

1.gzip 压缩gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件]2.gunzip 解压这个命令与gzip的功能刚好相反,这个是解压。 用法 gunzip 选项...
  • u012702547
  • u012702547
  • 2015年07月05日 19:38
  • 1313

数据压缩 压缩字节数组和文件

 转自:http://www.cnblogs.com/yank/p/Compress.html 感谢博主分享 在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩。在这里我...
  • hutao1101175783
  • hutao1101175783
  • 2016年06月29日 16:33
  • 1187

tar命令 文件压缩与解压

tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在...
  • done58
  • done58
  • 2015年12月25日 17:03
  • 5676

LZW压缩(解压缩)算法详解及源码

from: http://blog.chinaunix.net/uid-23741326-id-3124208.html LZW压缩算法是Lempel-Ziv-Welch 3个人共同发明的,...
  • xiongbixb2
  • xiongbixb2
  • 2015年11月08日 11:38
  • 2226

我(webabcd)的文章索引

重新想象 Windows 8 Store Apps 系列文章 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, P...
  • u013700340
  • u013700340
  • 2014年03月30日 20:00
  • 691

Java压缩和解压缩

public class ZipUtil { private static List list = new ArrayList(); public static void main(Strin...
  • mazhimazh
  • mazhimazh
  • 2014年09月01日 11:29
  • 921

webservice大数据量传输时的压缩和解压缩

当访问WebSerivice时,如果数据量很大,传输数据时就会很慢。为了提高速度,我们就会想到对数据进行压缩。首先我们来分析一下。         当在webserice中传输数据时,一般都采用Da...
  • fox123871
  • fox123871
  • 2013年05月17日 11:19
  • 674

压缩和解压缩

以zip和unzip处理.zip文件  1.zip命令的基本使用方法 zip file.zip *: zip后接压缩后的文件名,在它的后面输入要压缩的文件即可。 2.压缩后,自动删除原文件  zip ...
  • u012459917
  • u012459917
  • 2014年02月17日 19:41
  • 409

压缩和解压缩

现在很的app都有备份功能,备份的时候
  • Dylan_null
  • Dylan_null
  • 2014年11月18日 22:07
  • 282

C# 压缩和解压缩

话不多说,直接上代码,最后有重要说明!!!哦对了,用的s 压缩:
  • yy910308
  • yy910308
  • 2014年09月18日 09:10
  • 415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:压缩和解压缩
举报原因:
原因补充:

(最多只允许输入30个字)