日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# ZipHelper C#公共类 -- ICSharpCode.SharpZipLib.dll实现压缩和解压

發布時間:2025/3/15 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# ZipHelper C#公共类 -- ICSharpCode.SharpZipLib.dll实现压缩和解压 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于本文檔的說明

  本文檔基于ICSharpCode.SharpZipLib.dll的封裝,常用的解壓和壓縮方法都已經涵蓋在內,都是經過項目實戰積累下來的

1.基本介紹

由于項目中需要用到各種壓縮將文件進行壓縮下載,減少網絡的帶寬,所以壓縮是一個非常常見的功能,對于壓縮微軟自己也提供了一些類庫

  • 微軟自帶壓縮類ZipArchive類,適合NET FrameWork4.5才可以使用
  • 調用壓縮軟件命令執行壓縮動作,這個就需要電腦本身安裝壓縮軟件了
  • 使用第三方的壓縮dll文件,一般使用最多的是(ICSharpCode.SharpZipLib.dll),下載dll?ICSharpCode.SharpZipLib.zip
  • 本文使用的正是ICSharpCode.SharpZipLib.dll相關的dll,ZipArchive相關的壓縮和解壓縮,后續會慢慢補上的。

    2.實際項目

  • 壓縮單個文件,需要指定壓縮等級
  • 壓縮單個文件夾,需要指定壓縮等級
  • 壓縮多個文件或者多個文件夾
  • 對壓縮包進行加密【用的較少,實際情況也有】
  • 直接解壓,無需密碼
  • 需要密碼解壓
  • 2.1 壓縮單個文件

    寫了兩個方法,可以指定壓縮等級,這樣你的壓縮包大小就不一樣了

    2.2 壓縮單個文件夾

    public void ZipDir(string dirToZip, string zipedFileName, int compressionLevel = 9)

    ?

    2.3 壓縮多個文件或者文件夾

    public bool ZipManyFilesOrDictorys(IEnumerable<string> folderOrFileList, string zipedFile, string password)

    ?

    2.4?對壓縮包進行加密

    public bool ZipManyFilesOrDictorys(IEnumerable<string> folderOrFileList, string zipedFile, string password)

    ?

    2.5 直接解壓,無需密碼

    public void UnZip(string zipFilePath, string unZipDir)

    3.演示圖

    3.ZipHelper下載

    //------------------------------------------------------------------------------------- // All Rights Reserved , Copyright (C) 2016 , ZTO , Ltd . //-------------------------------------------------------------------------------------using System; using System.Collections; using System.Collections.Generic; using System.IO;namespace ZTO.PicTest.Utilities {using ICSharpCode.SharpZipLib.Checksums;using ICSharpCode.SharpZipLib.Zip;/// <summary>/// Zip壓縮幫助類////// 修改紀錄////// 2015-09-16 版本:1.0 YangHengLian 創建主鍵,注意命名空間的排序。/// 2016-5-7 YangHengLian增加了可以支持多個文件或者多個文件夾打包成一個zip文件/// /// 版本:1.0////// <author>/// <name>YangHengLian</name>/// <date>2015-09-16</date>/// </author>/// </summary>public class ZipHelper{/// <summary>/// 壓縮文件夾/// </summary>/// <param name="dirToZip"></param>/// <param name="zipedFileName"></param>/// <param name="compressionLevel">壓縮率0(無壓縮)9(壓縮率最高)</param>public void ZipDir(string dirToZip, string zipedFileName, int compressionLevel = 9){if (Path.GetExtension(zipedFileName) != ".zip"){zipedFileName = zipedFileName + ".zip";}using (var zipoutputstream = new ZipOutputStream(File.Create(zipedFileName))){zipoutputstream.SetLevel(compressionLevel);Crc32 crc = new Crc32();Hashtable fileList = GetAllFies(dirToZip);foreach (DictionaryEntry item in fileList){FileStream fs = new FileStream(item.Key.ToString(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);byte[] buffer = new byte[fs.Length];fs.Read(buffer, 0, buffer.Length);// ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(dirToZip.Length + 1));ZipEntry entry = new ZipEntry(Path.GetFileName(item.Key.ToString())){DateTime = (DateTime) item.Value,Size = fs.Length};fs.Close();crc.Reset();crc.Update(buffer);entry.Crc = crc.Value;zipoutputstream.PutNextEntry(entry);zipoutputstream.Write(buffer, 0, buffer.Length);}}}/// <summary> /// 獲取所有文件 /// </summary> /// <returns></returns> public Hashtable GetAllFies(string dir){Hashtable filesList = new Hashtable();DirectoryInfo fileDire = new DirectoryInfo(dir);if (!fileDire.Exists){throw new FileNotFoundException("目錄:" + fileDire.FullName + "沒有找到!");}GetAllDirFiles(fileDire, filesList);GetAllDirsFiles(fileDire.GetDirectories(), filesList);return filesList;}/// <summary> /// 獲取一個文件夾下的所有文件夾里的文件 /// </summary> /// <param name="dirs"></param> /// <param name="filesList"></param> public void GetAllDirsFiles(IEnumerable<DirectoryInfo> dirs, Hashtable filesList){foreach (DirectoryInfo dir in dirs){foreach (FileInfo file in dir.GetFiles("*.*")){filesList.Add(file.FullName, file.LastWriteTime);}GetAllDirsFiles(dir.GetDirectories(), filesList);}}/// <summary> /// 獲取一個文件夾下的文件 /// </summary> /// <param name="dir">目錄名稱</param>/// <param name="filesList">文件列表HastTable</param> public static void GetAllDirFiles(DirectoryInfo dir, Hashtable filesList){foreach (FileInfo file in dir.GetFiles("*.*")){filesList.Add(file.FullName, file.LastWriteTime);}}/// <summary> /// 功能:解壓zip格式的文件。 /// </summary> /// <param name="zipFilePath">壓縮文件路徑</param> /// <param name="unZipDir">解壓文件存放路徑,為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾</param> /// <returns>解壓是否成功</returns> public void UnZip(string zipFilePath, string unZipDir){if (zipFilePath == string.Empty){throw new Exception("壓縮文件不能為空!");}if (!File.Exists(zipFilePath)){throw new FileNotFoundException("壓縮文件不存在!");}//解壓文件夾為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾 if (unZipDir == string.Empty)unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));if (!unZipDir.EndsWith("/"))unZipDir += "/";if (!Directory.Exists(unZipDir))Directory.CreateDirectory(unZipDir);using (var s = new ZipInputStream(File.OpenRead(zipFilePath))){ZipEntry theEntry;while ((theEntry = s.GetNextEntry()) != null){string directoryName = Path.GetDirectoryName(theEntry.Name);string fileName = Path.GetFileName(theEntry.Name);if (!string.IsNullOrEmpty(directoryName)){Directory.CreateDirectory(unZipDir + directoryName);}if (directoryName != null && !directoryName.EndsWith("/")){}if (fileName != String.Empty){using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name)){int size;byte[] data = new byte[2048];while (true){size = s.Read(data, 0, data.Length);if (size > 0){streamWriter.Write(data, 0, size);}else{break;}}}}}}}/// <summary>/// 壓縮單個文件/// </summary>/// <param name="filePath">被壓縮的文件名稱(包含文件路徑),文件的全路徑</param>/// <param name="zipedFileName">壓縮后的文件名稱(包含文件路徑),保存的文件名稱</param>/// <param name="compressionLevel">壓縮率0(無壓縮)到 9(壓縮率最高)</param>public void ZipFile(string filePath, string zipedFileName, int compressionLevel = 9){// 如果文件沒有找到,則報錯 if (!File.Exists(filePath)){throw new FileNotFoundException("文件:" + filePath + "沒有找到!");}// 如果壓縮后名字為空就默認使用源文件名稱作為壓縮文件名稱if (string.IsNullOrEmpty(zipedFileName)){string oldValue = Path.GetFileName(filePath);if (oldValue != null){zipedFileName = filePath.Replace(oldValue, "") + Path.GetFileNameWithoutExtension(filePath) + ".zip";}}// 如果壓縮后的文件名稱后綴名不是zip,就是加上zip,防止是一個亂碼文件if (Path.GetExtension(zipedFileName) != ".zip"){zipedFileName = zipedFileName + ".zip";}// 如果指定位置目錄不存在,創建該目錄 C:\Users\yhl\Desktop\大漢三通string zipedDir = zipedFileName.Substring(0, zipedFileName.LastIndexOf("\\", StringComparison.Ordinal));if (!Directory.Exists(zipedDir)){Directory.CreateDirectory(zipedDir);}// 被壓縮文件名稱string filename = filePath.Substring(filePath.LastIndexOf("\\", StringComparison.Ordinal) + 1);var streamToZip = new FileStream(filePath, FileMode.Open, FileAccess.Read);var zipFile = File.Create(zipedFileName);var zipStream = new ZipOutputStream(zipFile);var zipEntry = new ZipEntry(filename);zipStream.PutNextEntry(zipEntry);zipStream.SetLevel(compressionLevel);var buffer = new byte[2048];Int32 size = streamToZip.Read(buffer, 0, buffer.Length);zipStream.Write(buffer, 0, size);try{while (size < streamToZip.Length){int sizeRead = streamToZip.Read(buffer, 0, buffer.Length);zipStream.Write(buffer, 0, sizeRead);size += sizeRead;}}finally{zipStream.Finish();zipStream.Close();streamToZip.Close();}}/// <summary> /// 壓縮單個文件 /// </summary> /// <param name="fileToZip">要進行壓縮的文件名,全路徑</param> /// <param name="zipedFile">壓縮后生成的壓縮文件名,全路徑</param> public void ZipFile(string fileToZip, string zipedFile){// 如果文件沒有找到,則報錯 if (!File.Exists(fileToZip)){throw new FileNotFoundException("指定要壓縮的文件: " + fileToZip + " 不存在!");}using (FileStream fileStream = File.OpenRead(fileToZip)){byte[] buffer = new byte[fileStream.Length];fileStream.Read(buffer, 0, buffer.Length);fileStream.Close();using (FileStream zipFile = File.Create(zipedFile)){using (ZipOutputStream zipOutputStream = new ZipOutputStream(zipFile)){// string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\\") + 1);string fileName = Path.GetFileName(fileToZip);var zipEntry = new ZipEntry(fileName){DateTime = DateTime.Now,IsUnicodeText = true};zipOutputStream.PutNextEntry(zipEntry);zipOutputStream.SetLevel(5);zipOutputStream.Write(buffer, 0, buffer.Length);zipOutputStream.Finish();zipOutputStream.Close();}}}}/// <summary>/// 壓縮多個目錄或文件/// </summary>/// <param name="folderOrFileList">待壓縮的文件夾或者文件,全路徑格式,是一個集合</param>/// <param name="zipedFile">壓縮后的文件名,全路徑格式</param>/// <param name="password">壓宿密碼</param>/// <returns></returns>public bool ZipManyFilesOrDictorys(IEnumerable<string> folderOrFileList, string zipedFile, string password){bool res = true;using (var s = new ZipOutputStream(File.Create(zipedFile))){s.SetLevel(6);if (!string.IsNullOrEmpty(password)){s.Password = password;}foreach (string fileOrDir in folderOrFileList){//是文件夾if (Directory.Exists(fileOrDir)){res = ZipFileDictory(fileOrDir, s, "");}else{//文件res = ZipFileWithStream(fileOrDir, s);}}s.Finish();s.Close();return res;}}/// <summary>/// 帶壓縮流壓縮單個文件/// </summary>/// <param name="fileToZip">要進行壓縮的文件名</param>/// <param name="zipStream"></param>/// <returns></returns>private bool ZipFileWithStream(string fileToZip, ZipOutputStream zipStream){//如果文件沒有找到,則報錯if (!File.Exists(fileToZip)){throw new FileNotFoundException("指定要壓縮的文件: " + fileToZip + " 不存在!");}//FileStream fs = null;FileStream zipFile = null;ZipEntry zipEntry = null;bool res = true;try{zipFile = File.OpenRead(fileToZip);byte[] buffer = new byte[zipFile.Length];zipFile.Read(buffer, 0, buffer.Length);zipFile.Close();zipEntry = new ZipEntry(Path.GetFileName(fileToZip));zipStream.PutNextEntry(zipEntry);zipStream.Write(buffer, 0, buffer.Length);}catch{res = false;}finally{if (zipEntry != null){}if (zipFile != null){zipFile.Close();}GC.Collect();GC.Collect(1);}return res;}/// <summary>/// 遞歸壓縮文件夾方法/// </summary>/// <param name="folderToZip"></param>/// <param name="s"></param>/// <param name="parentFolderName"></param>private bool ZipFileDictory(string folderToZip, ZipOutputStream s, string parentFolderName){bool res = true;ZipEntry entry = null;FileStream fs = null;Crc32 crc = new Crc32();try{//創建當前文件夾entry = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/")); //加上 “/” 才會當成是文件夾創建 s.PutNextEntry(entry);s.Flush();//先壓縮文件,再遞歸壓縮文件夾var filenames = Directory.GetFiles(folderToZip);foreach (string file in filenames){//打開壓縮文件fs = File.OpenRead(file);byte[] buffer = new byte[fs.Length];fs.Read(buffer, 0, buffer.Length);entry = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/" + Path.GetFileName(file)));entry.DateTime = DateTime.Now;entry.Size = fs.Length;fs.Close();crc.Reset();crc.Update(buffer);entry.Crc = crc.Value;s.PutNextEntry(entry);s.Write(buffer, 0, buffer.Length);}}catch{res = false;}finally{if (fs != null){fs.Close();}if (entry != null){}GC.Collect();GC.Collect(1);}var folders = Directory.GetDirectories(folderToZip);foreach (string folder in folders){if (!ZipFileDictory(folder, s, Path.Combine(parentFolderName, Path.GetFileName(folderToZip)))){return false;}}return res;}} } ZipHelper

    ?

    ?

    出處:https://www.cnblogs.com/weixing/p/5478845.html

    轉載于:https://www.cnblogs.com/mq0036/p/10522694.html

    總結

    以上是生活随笔為你收集整理的C# ZipHelper C#公共类 -- ICSharpCode.SharpZipLib.dll实现压缩和解压的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美成人国产精品一区二区 | 最新极品jizzhd欧美 | 国产对白自拍 | 精品乱码一区二区三区四区 | japansexxxxhd医生 夜夜操导航 | 久久精品小视频 | 亚洲欧美激情一区二区三区 | 尤物视频在线看 | 青青草国产在线 | 国产精品jizz在线观看无码 | 黄色美女片 | 日本中文字幕久久 | 亚洲欧美一区二区三区 | 久久综合激的五月天 | 中文字幕一区二区三区精彩视频 | 免费久久视频 | 大学生高潮无套内谢视频 | 91九色视频在线 | 成人av专区| 国模福利视频 | 欧美性受xxxxxx黑人xyx性爽 | 亚洲啊v在线 | 亚洲av午夜精品一区二区三区 | 日本肉体xxxx裸体xxx免费 | 精品无码久久久久成人漫画 | 免费国产a级片 | 国产情趣视频 | 欧美国产综合 | 黄色三级网站在线观看 | 尤物在线免费视频 | 青青草国产在线播放 | 亚洲欧美精选 | 亚洲精品免费在线观看 | 四虎一区二区三区 | 久久久久久久久久久久91 | 一区二区在线免费观看视频 | 三区在线| 特级西西444www大胆免费看 | 天天爽一爽 | 亚洲欧洲精品成人久久奇米网 | 激情高潮呻吟抽搐喷水 | 一道本av| 日韩成人激情视频 | www.日日夜夜 | 30一40一50老女人毛片 | 色妞色视频一区二区三区四区 | 国产人妻人伦精品1国产丝袜 | 天堂中文在线播放 | 精品欧美视频 | 麻豆changesxxx国产 | 成年人网站免费 | 欧美亚洲伦理 | 另类尿喷潮videofree | 人妻少妇精品无码专区二区 | 日日摸天天爽天天爽视频 | 日韩成人av影院 | 超碰美女在线 | 免费观看在线播放 | 欧美精品一二三区 | 人人艹人人爱 | 嫩草懂你| 欧美三区在线观看 | 国产精品一二三四区 | 男人干女人视频 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 麻豆视频91 | 日韩大胆人体 | 农村激情伦hxvideos | 91成年视频 | 香蕉性视频| 制服丝袜影音先锋 | 欧美乱人伦| 一区二区三区小视频 | 69日本xxxxxxxx96 | www.国产欧美| 在线看一区二区 | 国产免费久久精品国产传媒 | 嫩草嫩草嫩草嫩草 | 国产无遮挡免费观看视频网站 | 欧美色欧美色 | 在线视频国产一区 | 婷婷综合在线 | 久久99久久精品 | 国产资源网站 | 日本三级视频在线播放 | 美女精品 | 久久久免费在线观看 | 国产精品久久久久久网站 | 国产一级二级毛片 | 另类视频在线观看 | 久久精品国产亚洲av麻豆色欲 | 九九热色| 色哟哟在线播放 | 国产又粗又黄又猛 | 久久97人妻无码一区二区三区 | 朴银狐电影中文在线看 | 激情国产一区 | 在线免费福利视频 | 中文一区在线观看 |