1. 程式人生 > >ICSharpCode.SharpZipLib 壓縮、解壓檔案 附原始碼

ICSharpCode.SharpZipLib 壓縮、解壓檔案 附原始碼

我們需要dll 在官網上也有,也可以從百度網盤下載

好了,深入的大家還要多多研究,今天我們簡單介紹一下 簡單的 單檔案、資料夾的壓縮和解壓

先給大家看一下效果:

 

一、引入ICSharpCode.SharpZipLib

我們新建個幫助類 ZipHelper.cs  然後 新增 dll 引用 

二、新增完dll引用之後 我們 需要新增 這幾個Using引用

1 using ICSharpCode.SharpZipLib.Checksums; 
2 using ICSharpCode.SharpZipLib.Zip;
3 using System;4 using
System.IO;

三、壓縮單個檔案

這裡我添加了幾個引數 大家可以根據自己的需要 修改一下 

 1 /// <summary>
 2         /// ZIP:壓縮單個檔案
 3         /// add yuangang by 2016-06-13
 4         /// </summary>
 5         /// <param name="FileToZip">需要壓縮的檔案(絕對路徑)</param>
 6         /// <param name="ZipedPath">壓縮後的檔案路徑(絕對路徑)</param>
7 /// <param name="ZipedFileName">壓縮後的檔名稱(檔名,預設 同源檔案同名)</param> 8 /// <param name="CompressionLevel">壓縮等級(0 無 - 9 最高,預設 5)</param> 9 /// <param name="BlockSize">快取大小(每次寫入檔案大小,預設 2048)</param> 10 /// <param name="IsEncrypt">是否加密(預設 加密)</param>
11 public static void ZipFile(string FileToZip, string ZipedPath, string ZipedFileName = "", int CompressionLevel = 5, int BlockSize = 2048, bool IsEncrypt = true) 12 { 13 //如果檔案沒有找到,則報錯 14 if (!System.IO.File.Exists(FileToZip)) 15 { 16 throw new System.IO.FileNotFoundException("指定要壓縮的檔案: " + FileToZip + " 不存在!"); 17 } 18 19 //檔名稱(默認同原始檔名稱相同) 20 string ZipFileName = string.IsNullOrEmpty(ZipedFileName) ? ZipedPath + "\\" + new FileInfo(FileToZip).Name.Substring(0, new FileInfo(FileToZip).Name.LastIndexOf('.')) + ".zip" : ZipedPath + "\\" + ZipedFileName + ".zip"; 21 22 using (System.IO.FileStream ZipFile = System.IO.File.Create(ZipFileName)) 23 { 24 using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile)) 25 { 26 using (System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read)) 27 { 28 string fileName = FileToZip.Substring(FileToZip.LastIndexOf("\\") + 1); 29 30 ZipEntry ZipEntry = new ZipEntry(fileName); 31 32 if (IsEncrypt) 33 { 34 //壓縮檔案加密 35 ZipStream.Password = “123”; 36 } 37 38 ZipStream.PutNextEntry(ZipEntry); 39 40 //設定壓縮級別 41 ZipStream.SetLevel(CompressionLevel); 42 43 //快取大小 44 byte[] buffer = new byte[BlockSize]; 45 46 int sizeRead = 0; 47 48 try 49 { 50 do 51 { 52 sizeRead = StreamToZip.Read(buffer, 0, buffer.Length); 53 ZipStream.Write(buffer, 0, sizeRead); 54 } 55 while (sizeRead > 0); 56 } 57 catch (System.Exception ex) 58 { 59 throw ex; 60 } 61 62 StreamToZip.Close(); 63 } 64 65 ZipStream.Finish(); 66 ZipStream.Close(); 67 } 68 69 ZipFile.Close(); 70 } 71 }

四、壓縮資料夾

 1 /// <summary>
 2         /// ZIP:壓縮資料夾
 3         /// add yuangang by 2016-06-13
 4         /// </summary>
 5         /// <param name="DirectoryToZip">需要壓縮的資料夾(絕對路徑)</param>
 6         /// <param name="ZipedPath">壓縮後的檔案路徑(絕對路徑)</param>
 7         /// <param name="ZipedFileName">壓縮後的檔名稱(檔名,預設 同源資料夾同名)</param>
 8         /// <param name="IsEncrypt">是否加密(預設 加密)</param>
 9         public static void ZipDirectory(string DirectoryToZip, string ZipedPath, string ZipedFileName = "", bool IsEncrypt = true)
10         {
11             //如果目錄不存在,則報錯
12             if (!System.IO.Directory.Exists(DirectoryToZip))
13             {
14                 throw new System.IO.FileNotFoundException("指定的目錄: " + DirectoryToZip + " 不存在!");
15             }
16 
17             //檔名稱(默認同原始檔名稱相同)
18             string ZipFileName = string.IsNullOrEmpty(ZipedFileName) ? ZipedPath + "\\" + new DirectoryInfo(DirectoryToZip).Name + ".zip" : ZipedPath + "\\" + ZipedFileName + ".zip";
19 
20             using (System.IO.FileStream ZipFile = System.IO.File.Create(ZipFileName))
21             {
22                 using (ZipOutputStream s = new ZipOutputStream(ZipFile))
23                 {
24                     if (IsEncrypt)
25                     {
26                         //壓縮檔案加密
27                         s.Password = “123”;
28                     }
29                     ZipSetp(DirectoryToZip, s, "");
30                 }
31             }
32         }
33         /// <summary>
34         /// 遞迴遍歷目錄
35         /// add yuangang by 2016-06-13
36         /// </summary>
37         private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath)
38         {
39             if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar)
40             {
41                 strDirectory += Path.DirectorySeparatorChar;
42             }
43             Crc32 crc = new Crc32();
44 
45             string[] filenames = Directory.GetFileSystemEntries(strDirectory);
46 
47             foreach (string file in filenames)// 遍歷所有的檔案和目錄
48             {
49 
50                 if (Directory.Exists(file))// 先當作目錄處理如果存在這個目錄就遞迴Copy該目錄下面的檔案
51                 {
52                     string pPath = parentPath;
53                     pPath += file.Substring(file.LastIndexOf("\\") + 1);
54                     pPath += "\\";
55                     ZipSetp(file, s, pPath);
56                 }
57 
58                 else // 否則直接壓縮檔案
59                 {
60                     //開啟壓縮檔案
61                     using (FileStream fs = File.OpenRead(file))
62                     {
63 
64                         byte[] buffer = new byte[fs.Length];
65                         fs.Read(buffer, 0, buffer.Length);
66 
67                         string fileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1);
68                         ZipEntry entry = new ZipEntry(fileName);
69 
70                         entry.DateTime = DateTime.Now;
71                         entry.Size = fs.Length;
72 
73                         fs.Close();
74 
75                         crc.Reset();
76                         crc.Update(buffer);
77 
78                         entry.Crc = crc.Value;
79                         s.PutNextEntry(entry);
80 
81                         s.Write(buffer, 0, buffer.Length);
82                     }
83                 }
84             }
85         }

五、解壓一個ZIP檔案

 1  /// <summary>
 2         /// ZIP:解壓一個zip檔案
 3         /// add yuangang by 2016-06-13
 4         /// </summary>
 5         /// <param name="ZipFile">需要解壓的Zip檔案(絕對路徑)</param>
 6         /// <param name="TargetDirectory">解壓到的目錄</param>
 7         /// <param name="Password">解壓密碼</param>
 8         /// <param name="OverWrite">是否覆蓋已存在的檔案</param>
 9         public static void UnZip(string ZipFile, string TargetDirectory, string Password, bool OverWrite = true)
10         {
11             //如果解壓到的目錄不存在,則報錯
12             if (!System.IO.Directory.Exists(TargetDirectory))
13             {
14                 throw new System.IO.FileNotFoundException("指定的目錄: " + TargetDirectory + " 不存在!");
15             }
16             //目錄結尾
17             if (!TargetDirectory.EndsWith("\\")) { TargetDirectory = TargetDirectory + "\\"; }
18 
19             using (ZipInputStream zipfiles = new ZipInputStream(File.OpenRead(ZipFile)))
20             {
21                 zipfiles.Password = Password;
22                 ZipEntry theEntry;
23 
24                 while ((theEntry = zipfiles.GetNextEntry()) != null)
25                 {
26                     string directoryName = "";
27                     string pathToZip = "";
28                     pathToZip = theEntry.Name;
29 
30                     if (pathToZip != "")
31                         directoryName = Path.GetDirectoryName(pathToZip) + "\\";
32 
33                     string fileName = Path.GetFileName(pathToZip);
34 
35                     Directory.CreateDirectory(TargetDirectory + directoryName);
36 
37                     if (fileName != "")
38                     {
39                         if ((File.Exists(TargetDirectory + directoryName + fileName) && OverWrite) || (!File.Exists(TargetDirectory + directoryName + fileName)))
40                         {
41                             using (FileStream streamWriter = File.Create(TargetDirectory + directoryName + fileName))
42                             {
43                                 int size = 2048;
44                                 byte[] data = new byte[2048];
45                                 while (true)
46                                 {
47                                     size = zipfiles.Read(data, 0, data.Length);
48 
49                                     if (size > 0)
50                                         streamWriter.Write(data, 0, size);
51                                     else
52                                         break;
53                                 }
54                                 streamWriter.Close();
55                             }
56                         }
57                     }
58                 }
59 
60                 zipfiles.Close();
61             }
62         }

相關推薦

ICSharpCode.SharpZipLib 壓縮檔案 原始碼

我們需要dll 在官網上也有,也可以從百度網盤下載 好了,深入的大家還要多多研究,今天我們簡單介紹一下 簡單的 單檔案、資料夾的壓縮和解壓 先給大家看一下效果:   一、引入ICSharpCode.SharpZipLib 我們新建個幫助類 ZipHelper.cs  然後 新增 dll 引用

Huffman編碼實現壓縮檔案

Huffman編碼:根據詞頻構建Huffman樹,實現對文字的字首編碼。 1、統計文字中每個字元出現的次數,放入優先佇列中,構建一棵空的二叉樹; 2、取出頻率最小的兩個字元a、b,字元a、b的頻率分別作為此二叉樹的左右結點,左結點的編號為1,右結點的編號為0,其頻率之和(f

linux檔案壓縮命令

命令:gzip  壓縮後文件名   要壓縮檔案 作用:使用gzip對檔案進行壓縮 命令:gunzip(gzip -d) 要解壓縮的檔名  解壓後的檔名 作用:解壓gzip檔案 命令:tar [選項] 打包後的檔名  打包的檔名 作用:對檔案進行打包 常用選項: -c 打

Linux 檔案壓縮

1  .gz 壓         縮:gzip fileName 解壓方式1:gzip -df fileName.gz  (-d解壓,-f解壓的檔案如與已有檔案同名,強制覆蓋) 解壓方式2:gunzip fileName.gz 2  .tar 壓         縮:ta

Python中使用tarfile壓縮tar歸檔檔案

'r' or 'r:*'   Open for reading with transparent compression (recommended). 'r:'   Open for reading exclusively without compression. 'r:gz'   Open for re

C#工具類:使用SharpZipLib進行壓縮文件

文件的 crc32 程序 writer subst write string mar sum SharpZipLib是一個開源的C#壓縮解壓庫,應用非常廣泛。就像用ADO.NET操作數據庫要打開連接、執行命令、關閉連接等多個步驟一樣,用SharpZipLib進行壓縮和解壓也

Linux 學習筆記 5 檔案的下載壓縮初步認識yum

寫在前面 上節我們通過簡單的幾組命令,已經完全的實現了檔案的移動、刪除、更名、以及複製,我們最常用的基本玩法,本節將帶著大家學習壓縮、解壓的相關步驟。 Linux 學習筆記 4 建立、複製、移動、檔案的基本操作 壓縮解壓還是比較常見並且常用的,比如從Apache 這種開源網站下載比如Tomcat Maven

C# 壓縮資料夾或檔案(帶密碼)

今天梳理一下專案中用到的壓縮、解壓資料夾或檔案的方法,發現因為需求不同,已經用了好幾個不同元件。今天就好好整理記錄下,別下次遇到需求又重頭開始了。 #### DotNetZip DotNetZip是一個開源的免費類庫,主要提供了快速操作zip檔案的工具集,VB、C#任何.Net語言都可以通過它建立、解壓縮z

linux中常用的壓縮命令詳

壓縮 不管在windows中還是在linux中,我們會經常看到各種壓縮的文件,此刻我們需要使用就得解壓,在這就介紹介紹linux中解壓、壓縮的命令。 在做實驗之前,我們先創建幾個文件,大小都是100M,方便我們更能清晰理解。 一、compress【選項】file(不是太常用,而且tab鍵還不能補齊)

(6)壓縮

文件的 指令 包名 pan 壓縮 1.5 建立 style -- tar:   -c  建立一個壓縮文件的參數指令   -x  解開一個壓縮文件的參數指令   -f  使用檔名,在後面接文檔名,不加參數   -t  查看壓縮文件裏的文件   -z  表示壓縮格式為.ta

Linux壓縮文件

不同 解壓縮 color HR .gz blog 命令 bzip pos   對於.tar格式的文件壓縮和解壓比較常用,今天對於.zip格式的文件用同樣的命令無效。真是被自己蠢到了,忽略了後綴格式。。。   1.對於tar格式文件   壓縮: tar –zcvf 壓縮完後的

壓縮歸檔

混合 後綴名 文件解壓 展開 bzip 連接 壓縮文件 unxz 失敗 壓縮類命令:zip、gzip、bzip2、xz gzip:壓縮後刪除源文件、自動添加後綴,不能壓縮目錄、軟鏈接,後綴.gz gunzip:解壓後刪除源文件 zcat:不解壓顯示文件內容   gzip

ubuntu壓縮檔案

1.壓縮zip # zip -r archive_name.zip directory_to_compress 2.tar只是打包並不壓縮,好處就是它只消耗非常少的CPU以及時間去打包檔案 # tar -cvf archive_name.tar directory_to_compress

java實現壓縮

package com.chen.stu.io; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.Zi

Linux下壓縮命令壓縮比介紹說明

Linux下壓縮、解壓命令很多靈活度很大,不像在windows下winrar或360壓縮幾乎各佔版比江山,清一色的.rar .zip格式。Linux下常用的tar tar.gz tar.bz2 .Z等等格式種類繁多。而每種壓縮和解壓方式所耗CPU時間和壓縮比率也差異甚大。在此我一一列舉,

Mac連線Linux伺服器並上傳檔案

       由於工作原因,要求在Linux伺服器沒網路的情況下部署專案——首先我要做的是將相關檔案上傳至伺服器。我在網上搜了很多相關資料,結合自身實際情況,整理出我所做的步驟,以供參考。 目的:Mac連線上Linux伺服器,並將檔案上傳至Linux伺服器

ubuntu之壓縮檔案

ubuntu之壓縮與解壓檔案 安裝壓縮工具 sudo apt-get install rar 安裝解壓工具 sudo apt-get install unrar .tar 解包: tar xvf xxx.tar 打包: tar cvf xxx.tar dirname

Linux下使用gzip壓縮檔案

Linux下gzip命令是用來壓縮檔案的。gzip不僅可以用來壓縮大的、較少使用的檔案以節省磁碟空間,還可以和tar命令一起構成Linux作業系統中比較流行的壓縮檔案格式。據統計,gzip命令對文字檔案有60%~70%的壓縮率。 gzip命令的格式是: gzip [option] [file] gz

常用模組(shutil copy壓縮

作用與功能 主要用於檔案的copy,壓縮,解壓 匯入shuitl模組: import shutil    copy方法 1 1、shutil.copyfileobj()  開啟file1,並copy寫入file2: 2 with

LINUXC#下使用zlib進行對稱壓縮

zlib是一個壓縮庫,封裝了多個演算法,我們這裡使用的是zip。 一、準備zlib的LINUX及C#庫 zlib專案地址: zlib.net專案地址(for C#): 二、操作函式