利用#Develop內嵌的#ZipLib,輕鬆搞定.net下的解壓縮 (轉)

themoney發表於2007-10-05
利用#Develop內嵌的#ZipLib,輕鬆搞定.net下的解壓縮 (轉)[@more@]

利用#Develop內嵌的#ZipLib,輕鬆搞定下的解

  #Develop是一個用於製作或者的專案而設計的一個編輯器,而#ZipLib是它內嵌的一個製作.net下的解壓縮的強大工具。關於#Develop這個軟體,大家可以去它的中文網站(x.cn/comm/bbs/Forum.?Forum_ID=14">)最新的版本。

  下面就來介紹用#ZipLib進行.net下的解壓縮的方法。

  1.BZip2
  加入ICode.SharpZipLib.dll的引用,在#Develop的目錄下的SharpDevelopbin目錄下。然後在中使用using語句把BZip2

類庫包含進來。
壓縮:使用BZip2的靜態方法Compress。
  它的第一個引數是所要壓縮的所代表的輸入流,可以使用System.IO.File的靜態方法OpenRead。
  第二個引數是要建立的壓縮檔案所代表的輸出流,可以使用System.IO.File的靜態方法Create建立,壓縮檔名是所要壓縮檔案的檔名

加上壓縮字尾.bz(同樣你也可以取其他的檔名)。
  第三個引數是要壓縮的塊大小(一般為2048的整數)。

解壓:使用BZip2的靜態方法Decompress。
  它的第一個引數是所要解壓的壓縮檔案所代表的輸入流,可以使用System.IO.File的靜態方法OpenRead。
  第二個引數是要建立的解壓檔案所代表的輸出流,可以使用System.IO.File的靜態方法Create建立,因為解壓檔案的檔名是去掉了壓縮

副檔名的壓縮檔名(你也可以做成解壓檔案與壓縮檔案不同名的)。
編譯你的程式,然後在命令列方式下輸入bzip2 檔名(假設建立的C#檔案是bzip2,就可以生成壓縮檔案;輸入bzip2 -d 檔名,就會解壓

出檔案來(-d是用來表示解壓,你也可以使用其他的符號)。
呵呵,原來做壓縮可以這麼簡單的,壓縮效果也可以啊。
using System;
using System.IO;
using ICSharpCode.SharpZipLib.BZip2;

class MainClass
{
  public static void Main(string[] args)
  {
  if (args[0] == "-d") { // 解壓
  BZip2.Decompress(File.OpenRead(args[1]), File.Create(Path.GetFileNameWithoutExtension(args[1])));
  } else { //壓縮
  BZip2.Compress(File.OpenRead(args[0]), File.Create(args[0] + ".bz"), 4096);
  }
  }
}
2. 
  加入ICSharpCode.SharpZipLib.dll的引用,在#Develop的安裝目錄下的SharpDevelopbin目錄下。然後在程式中使用using語句把GZip類

庫包含進來。 
  由於GZip沒有BZip2的簡單解壓縮方法,因此只能使用流方法來進行解壓縮。具體的方法見程式的說明。
  編譯程式,然後在命令列方式下輸入GZ檔名(假設建立的C#檔案是GZip,就可以生成壓縮檔案;輸入G-d 檔名,就會解壓出文

件來(-d是用來表示解壓,你也可以使用其他的符號)。 

using System;
using System.IO;

using ICSharpCode.SharpZipLib.GZip;

class MainClass
{
  public static void Main(string[] args)
  {
  if (args[0] == "-d") { // 解壓
  Stream s = new GZipInputStream(File.OpenRead(args[1]));
  //生成一個GZipInputStream流,用來開啟壓縮檔案。
  //因為GZipInputStream由Stream派生,所以它可以賦給Stream。
  //它的構造的引數是一個表示要解壓的壓縮檔案所代表的檔案流
  FileStream fs = File.Create(Path.GetFileNameWithoutExtension(args[1]));
  //生成一個檔案流,它用來生成解壓檔案
  //可以使用System.IO.File的靜態函式Create來生成檔案流
  int size = 2048;//指定壓縮塊的大小,一般為2048的倍數
  byte[] writeData = new byte[size];//指定緩衝區的大小
  while (true) {
  size = s.Read(writeData, 0, size);//讀入一個壓縮塊
  if (size > 0) {
  fs.Write(writeData, 0, size);//寫入解壓檔案代表的檔案流
  } else {
  break;//若讀到壓縮檔案尾,則結束
  }
  }
  s.Close();
  } else { // 壓縮 
  Stream s = new GZipOutputStream(File.Create(args[0] + ".gz"));
  //生成一個GZipOutputStream流,用來生成壓縮檔案。
  //因為GZipOutputStream由Stream派生,所以它可以賦給Stream。
  FileStream fs = File.OpenRead(args[0]);
  /生成一個檔案流,它用來開啟要壓縮的檔案
  //可以使用System.IO.File的靜態函式OpenRead來生成檔案流
  byte[] writeData = new byte[fs.Length];
  //指定緩衝區的大小
  fs.Read(writeData, 0, (int)fs.Length);
  //讀入檔案
  s.Write(writeData, 0, writeData.Length);
  //寫入壓縮檔案
  s.Close();
  //關閉檔案
  }
  }
}


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974824/,如需轉載,請註明出處,否則將追究法律責任。

相關文章