這是我的文章備份 原文請看 ---- [習題] Ch17 File與 I/O -- 檔案壓縮,採用 GZipStream 類別
http://www.dotblogs.com.tw/mis2000lab/archive/2010/07/02/file_compression_decompression.aspx
===========================================
[習題] Ch17 File與 I/O -- 檔案壓縮,採用 GZipStream 類別
這兩個檔案(一個進行壓縮、另一個解壓縮),可以當成「ASP.NET專題實 務」一書,
第十七章 File與 I/O 的 補充習題。
今天有一位讀者詢問檔案壓縮的問題,
我查了一下 DotBlogs,高手如雲,文章很多。
有兩篇很優異的文章要跟大家推薦:
余小章 兄 -- http://www.dotblogs.com.tw/yc421206/archive/2009/01/18/6869.aspx
鄭子漣 兄 -- http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!1886.entry
鄭子漣 兄發現一個問題,建議您參考他的文章,仔細閱讀一遍。
MSDN文件,為此補充說明如下:
DeflateStream 和 GZipStream 類別的最佳使用方式是用於未壓縮的資料來源。
如果來源資料已經壓縮,使用這些類別可能會增加資料流的實際大小。
===========================================================================
微軟官方的MSDN,當然是最佳選擇。
有中文說明與範例: http://msdn.microsoft.com/zh-tw/library/system.io.compression.gzipstream.aspx
壓縮、解壓縮都有提供範例,直接修改便能使用了!真棒!
透過 GZipStream 類別,會壓縮成 .gz檔案,可以透過常用的 WinZip等軟體,來解壓縮
MSDN文件,說明如下:
這個類別表示 GZIP 資料格式,它使用無失真檔案壓縮和解壓縮的工業標準演算法。該格式包含用於偵測資料毀損的循環冗餘檢查 (CRC) 值。GZIP 資料格式使用與 DeflateStream 類別相同的演算法,但它可擴充使用其他壓縮格式。該格式可以很容易地使用專利不涵蓋的方式實作。這個類別不能用於壓縮大於 4 GB 的檔案。
範例 File_Compression.aspx (進行壓縮)
02

03

04

05 '=== 進行壓縮,必須宣告這兩個 NameSpace ===
06

07
08

09

10

11

12 Dim dirpath As String = "c:\MIS2000Lab_ASP.NET_Log"
13

14

15 '== 壓縮某一個目錄下,所有的檔案。(更下層的子目錄,本範例無法壓縮)
16

17

18

19

20

21

22
23

24

25

26

27

28

29 ' Create the compressed file.
30

31

32

33

34

35 Label1.Text = Label1.Text & "Compressed " & fi.Name & " from " & fi.Length.ToString() & " to " & outFile.Length.ToString() & " bytes.<br/>"
36

37

38

39

40 End Using
41

===========================================================================
不過,在解壓縮的過程中, MSDN提供的範例有一個小問題需要克服。
如果這個目錄下,參雜了「尚未壓縮的檔案」與「已經壓縮的檔案」,範例便會出現異常。
因為這個解壓縮的範例,會先找附檔名,例如「.doc.gz」
然後,附檔名改成 .doc檔,再來還原。
如果遇見「尚未壓縮的檔案(如 .doc)」就會報錯 -- 檔案不符合 .gz 串流。
只要一個簡單的 if 判別式就能解這個問題了。
我修改以後的檔案,名為 File_DeCompression.aspx
02

03

04

05 '=== 進行壓縮,必須宣告這兩個 NameSpace ===
06

07
08

09

10

11

12 Dim dirpath As String = "c:\MIS2000Lab_ASP.NET_Log"
13

14

15 '== 壓縮某一個目錄下,所有的檔案。(更下層的子目錄,本範例無法壓縮)
16

17

18

19

20

21

22
23

24

25

26

27

28 Dim curFile As String = fi.FullName
29

30 '== 注意!!目錄下,只有附檔名「.gz」壓縮檔,才會進行解壓縮。
31

32

33

34 '== 解開壓縮檔
35

36

37

38 ' Copy the decompression stream into the output file.
39

40

41 Label1.Text = Label1.Text & "<br />Decompressed from " & fi.Name & " to " & origName
42

43

44

45

46 End Using
47

===========================================================================
因為資料來源與範例,均是引用自 MSDN。
小弟不敢藏私,分享如下:Ch17_File_Compression.rar(VB 與 C#範例都有)
這兩個檔案(一個進行壓縮、另一個解壓縮),可以當成「ASP.NET專題實務」一書,
第十七章 File與 I/O 的 補充習題。
謝謝各位。
今日值班正妹,北川景子 (最近日本台有撥她的連續劇)
![]() |
![]() |
![]() |
...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ....................................................................................................
ASP.NET 4.0 專題實務 ( I )--入門實戰篇 (松崗出版,VB版 / C#版)
範例比上一本書增加 166%,內容(頁數)增加 135% 上 / 下兩集 (2010年)已經出版囉 ~ 歡迎到此參加團購
ASP.NET專題實務( II ):範例集 與 4.0新功能(文魁出版)
.................................................................................................... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........