2012年11月26日 星期一

[C#] 透過程式壓縮資料夾為zip檔

主要找到的方法有 3 種:
1. 用微軟內建的方法
http://msdn.microsoft.com/zh-tw/library/ms404280.aspx
http://msdn.microsoft.com/zh-tw/library/system.io.compression.zipfile.aspx

首先要呼叫該方法的專案必須為.NET4.5 版本
接著加入參考 System.IO.Compression.FileSystem.dll 檔
並引用命名空間 System.IO.Compression 之後~

即可呼叫到該方法囉~頗方便的
因為我只要壓縮,所以只要用到下面 3 行就解決了

string startPath = @"C:\ProjectSamplePack";
 string zipPath = @"C:\result.zip";
 ZipFile.CreateFromDirectory(startPath, zipPath);


算是頗易用的一個方法。



2. 使用 SharpZip
http://jjnnykimo.pixnet.net/blog/post/25844741-c%23,-sharpzip-%E6%87%89%E7%94%A8
http://itgroup.blueshop.com.tw/uuuiii00/AllenJ?n=convew&i=21586

官網:http://www.icsharpcode.net/OpenSource/SharpZipLib/

試了一下,感覺沒試到一個特別易用的懶人方法... 還要另外寫東西來重組他提供的 stream 元件,
不尬意... 不試了。

3.WinRar 內建方法
http://blog.xuite.net/yan.kee/CSharp/17709180-%5B%E6%94%B6%E8%97%8F%5DC%23+%E5%88%A9%E7%94%A8WinRAR+(%E5%8A%A0%E5%AF%86)%E5%A3%93%E7%B8%AE%E5%8F%8A%E8%A7%A3%E5%A3%93%E7%B8%AE+%E7%9B%B8%E9%97%9C%E6%96%87%E4%BB%B6%E5%A4%BE%E5%8F%8A%E6%96%87%E4%BB%B6+

一個重點是必須要灌好 WinRar 的軟體之後才能使用,
不是很推 @@

4. 使用 DotNetZip 處理
http://www.dotblogs.com.tw/fatty0860/archive/2009/02/09/7084.aspx

後來是使用這個作為解決功能需求的方法,
因為他簡單易用 XD
.Net 版本只要 2.0 以上就可以用,
而這邊的需求也只有簡單的壓縮檔案而已,
CODE 如下:

using Ionic.Zip;
using Ionic.Zlib;

 protected void btnZipTest_Click(object sender, EventArgs e)
{
    string zipFile = @"C:\test.zip";

    ZipFile zip = new ZipFile(zipFile);
    zip.AddDirectory(@"C:\ProjectSamplePack");
    zip.Save();
}

執行之後很快樂的可以發現目標檔案就這樣出現在目的的路徑囉~
這次找到的大概是這些~

20121130補充---

到後來是使用第4個的DOTNETZIP完成功能的撰寫,
好好用啊~看資料夾的狀態感覺也是一邊壓縮,先產生一個TMP檔做處理。

但是發現有個小問題就是...
檔名不能直接用Datetime.Now作為命名。

以今天日期為例,
假設檔名為"test_"+Datetime.Now.ToString()+".zip"
會出現 test_2012/11/30.zip這種名稱,
但這種檔名是不合法的,程式端會認不得而造成失敗,
謹記....orz

1 則留言:

  1. 把Datetime.Now.ToString()
    改成
    DateTime.Now.ToString("yyyy-MM-dd,HH-mm-ss")
    指定日期格式 就可以避免勝不認得而造成失敗了

    回覆刪除