ICSharpCode.SharpZipLib 壓縮、解壓檔案 附原始碼
我們需要dll 在官網上也有,也可以從百度網盤下載
好了,深入的大家還要多多研究,今天我們簡單介紹一下 簡單的 單檔案、資料夾的壓縮和解壓
先給大家看一下效果:
一、引入ICSharpCode.SharpZipLib
我們新建個幫助類 ZipHelper.cs 然後 新增 dll 引用
二、新增完dll引用之後 我們 需要新增 這幾個Using引用
1 using ICSharpCode.SharpZipLib.Checksums; 2 using ICSharpCode.SharpZipLib.Zip; 3 using System;4 usingSystem.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
LINUX、C#下使用zlib進行對稱壓縮、解壓
zlib是一個壓縮庫,封裝了多個演算法,我們這裡使用的是zip。 一、準備zlib的LINUX及C#庫 zlib專案地址: zlib.net專案地址(for C#): 二、操作函式