最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C#壓縮、解壓文件夾/文件(帶密碼)

 更新時(shí)間:2020年09月04日 10:48:25   作者:傅小灰  
這篇文章主要給大家介紹了關(guān)于C#壓縮、解壓文件夾/文件(帶密碼)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

今天梳理一下項(xiàng)目中用到的壓縮、解壓文件夾或文件的方法,發(fā)現(xiàn)因?yàn)樾枨蟛煌呀?jīng)用了好幾個(gè)不同組件。今天就好好整理記錄下,別下次遇到需求又重頭開(kāi)始了。

DotNetZip

DotNetZip是一個(gè)開(kāi)源的免費(fèi)類(lèi)庫(kù),主要提供了快速操作zip文件的工具集,VB、C#任何.Net語(yǔ)言都可以通過(guò)它創(chuàng)建、解壓縮zip文件。我使用該類(lèi)庫(kù)最主要的目的還是因?yàn)樗梢詣?chuàng)建帶密碼保護(hù)的壓縮文件。

只有設(shè)置了zip.Password = "password"之后,被壓縮的文件才會(huì)有密碼保護(hù)

/// <summary>
/// 壓縮文件/文件夾
/// </summary>
/// <param name="filePath">需要壓縮的文件/文件夾路徑</param>
/// <param name="zipPath">壓縮文件路徑(zip后綴)</param>
/// <param name="password">密碼</param>
/// <param name="filterExtenList">需要過(guò)濾的文件后綴名</param>
public static void CompressionFile(string filePath, string zipPath, string password = "", List<string> filterExtenList = null)
{
 try
 {
  using (ZipFile zip = new ZipFile(Encoding.UTF8))
  {
   if (!string.IsNullOrWhiteSpace(password))
   {
    zip.Password = password;
   }
   if (Directory.Exists(filePath))
   {
    if (filterExtenList == null)
     zip.AddDirectory(filePath);
    else
     AddDirectory(zip, filePath, filePath, filterExtenList);
   }
   else if (File.Exists(filePath))
   {
    zip.AddFile(filePath,"");
   }
   zip.Save(zipPath);
  }
 }
 catch (Exception ex)
 {
  throw ex;
 }
}

/// <summary>
/// 添加文件夾
/// </summary>
/// <param name="zip">ZipFile對(duì)象</param>
/// <param name="dirPath">需要壓縮的文件夾路徑</param>
/// <param name="rootPath">根目錄路徑</param>
/// <param name="filterExtenList">需要過(guò)濾的文件后綴名</param>
public static void AddDirectory(ZipFile zip, string dirPath, string rootPath, List<string> filterExtenList)
{
 var files = Directory.GetFiles(dirPath);
 for (int i = 0; i < files.Length; i++)
 {
  //如果Contains不支持第二個(gè)參數(shù),就用.ToLower()
  if (filterExtenList == null || (filterExtenList != null && !filterExtenList.Any(d => Path.GetExtension(files[i]).Contains(d, StringComparison.OrdinalIgnoreCase))))
  {
   //獲取相對(duì)路徑作為zip文件中目錄路徑
   zip.AddFile(files[i], Path.GetRelativePath(rootPath, dirPath));
   
  //如果沒(méi)有Path.GetRelativePath方法,可以用下面代碼替換
   //string relativePath = Path.GetFullPath(dirPath).Replace(Path.GetFullPath(rootPath), "");
   //zip.AddFile(files[i], relativePath);
  }
 }
 var dirs = Directory.GetDirectories(dirPath);
 for (int i = 0; i < dirs.Length; i++)
 {
  AddDirectory(zip, dirs[i], rootPath, filterExtenList);
 }
}

SharpCompress

SharpCompress是用到現(xiàn)在,感覺(jué)功能最強(qiáng)大的壓縮、解壓開(kāi)源插件。它支持處理zip、rar、7z等多種格式的壓縮文件,使用方式也很簡(jiǎn)單。當(dāng)然,最讓我難受的是創(chuàng)建壓縮文件的時(shí)候沒(méi)法設(shè)置密碼~所以才有了上面DotnetZip的代碼。

SharpCompress版本不同,設(shè)置ArchiveEncoding的方式也不同,默認(rèn)設(shè)置了UTF8防止解壓亂碼。
通過(guò)設(shè)置ArchiveType切換生成不同格式壓縮文件

/// <summary>
/// 壓縮文件/文件夾
/// </summary>
/// <param name="filePath">需要壓縮的文件/文件夾路徑</param>
/// <param name="zipPath">壓縮文件路徑(zip后綴)</param>
/// <param name="filterExtenList">需要過(guò)濾的文件后綴名</param>
public static void CompressionFile(string filePath, string zipPath, List<string> filterExtenList = null)
{
  try
  {
    using (var zip = File.Create(zipPath))
    {
      var option = new WriterOptions(CompressionType.Deflate)
      {
        ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding()
        {
          Default = Encoding.UTF8
        }
      };
      using (var zipWriter = WriterFactory.Open(zip, ArchiveType.Zip, option))
      {
        if (Directory.Exists(filePath))
        {
          //添加文件夾
          zipWriter.WriteAll(filePath, "*",
            (path) => filterExtenList == null ? true : !filterExtenList.Any(d => Path.GetExtension(path).Contains(d, StringComparison.OrdinalIgnoreCase)), SearchOption.AllDirectories);
        }
        else if (File.Exists(filePath))
        {
          zipWriter.Write(Path.GetFileName(filePath), filePath);
        }
      }
    }
  }
  catch (Exception ex)
  {
    throw ex;
  }
}
/// <summary>
/// 解壓文件
/// </summary>
/// <param name="zipPath">壓縮文件路徑</param>
/// <param name="dirPath">解壓到文件夾路徑</param>
/// <param name="password">密碼</param>
public static void DeCompressionFile(string zipPath, string dirPath, string password = "")
{
  if (!File.Exists(zipPath))
  {
    throw new ArgumentNullException("zipPath壓縮文件不存在");
  }
  Directory.CreateDirectory(dirPath);
  try
  {
    using (Stream stream = File.OpenRead(zipPath))
    {
      var option = new ReaderOptions()
      {
        ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding()
        {
          Default = Encoding.UTF8
        }
      };
      if (!string.IsNullOrWhiteSpace(password))
      {
        option.Password = password;
      }

      var reader = ReaderFactory.Open(stream, option);
      while (reader.MoveToNextEntry())
      {
        if (reader.Entry.IsDirectory)
        {
          Directory.CreateDirectory(Path.Combine(dirPath, reader.Entry.Key));
        }
        else
        {
           //創(chuàng)建父級(jí)目錄,防止Entry文件,解壓時(shí)由于目錄不存在報(bào)異常
           var file = Path.Combine(dirPath, reader.Entry.Key);
           Directory.CreateDirectory(Path.GetDirectoryName(file));
           reader.WriteEntryToFile(file);
        }
      }
    }
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

總結(jié)

相似的插件還有SharpZipLib(支持更多的壓縮格式)、SevenZipSharp(專(zhuān)注處理7z格式壓縮文件)等,它們也都有各自的優(yōu)缺點(diǎn)。但總的來(lái)說(shuō),上面的兩個(gè)組件已經(jīng)滿(mǎn)足日常工作中的大部分需求,遇到相同問(wèn)題的朋友可以參考下~

到此這篇關(guān)于C#壓縮、解壓文件夾/文件(帶密碼)的文章就介紹到這了,更多相關(guān)C#壓縮、解壓文件夾/文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#在PDF中繪制不同風(fēng)格類(lèi)型的文本方法實(shí)例

    C#在PDF中繪制不同風(fēng)格類(lèi)型的文本方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于C#在PDF中繪制不同風(fēng)格類(lèi)型的文本的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • C#發(fā)送數(shù)據(jù)到剪貼板及從剪貼板中取數(shù)據(jù)的方法

    C#發(fā)送數(shù)據(jù)到剪貼板及從剪貼板中取數(shù)據(jù)的方法

    這篇文章主要介紹了C#發(fā)送數(shù)據(jù)到剪貼板及從剪貼板中取數(shù)據(jù)的方法,涉及C#針對(duì)剪貼板數(shù)據(jù)的讀寫(xiě)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 基于WPF實(shí)現(xiàn)視頻封面查看器

    基于WPF實(shí)現(xiàn)視頻封面查看器

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)視頻封面查看器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • C#對(duì)Excel表csv文件的讀寫(xiě)操作詳解

    C#對(duì)Excel表csv文件的讀寫(xiě)操作詳解

    在C#編程中,CSV(Comma Separated Values)文件是一種常見(jiàn)的數(shù)據(jù)存儲(chǔ)格式,用于存儲(chǔ)表格數(shù)據(jù),如數(shù)據(jù)庫(kù)導(dǎo)出或報(bào)表,CSV文件以其簡(jiǎn)單、易于處理和跨平臺(tái)兼容性而受到廣泛使用,本篇文章將深入探討如何在C#中進(jìn)行CSV文件的讀寫(xiě)操作,需要的朋友可以參考下
    2024-12-12
  • Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng)

    Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C# 中使用隱式和顯式操作符的示例

    C# 中使用隱式和顯式操作符的示例

    這篇文章主要介紹了C# 中使用隱式和顯式操作符的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C# WORD操作實(shí)現(xiàn)代碼

    C# WORD操作實(shí)現(xiàn)代碼

    在當(dāng)前項(xiàng)目開(kāi)發(fā)過(guò)程中,客戶(hù)有根據(jù)數(shù)據(jù)庫(kù)數(shù)據(jù)生成WORD文檔的需求,在和同事溝通的過(guò)程中,找到了兩個(gè)解決方案
    2009-04-04
  • C# 使用 log4net 日志組件的方法

    C# 使用 log4net 日志組件的方法

    這篇文章主要介紹了C# 使用 log4net 日志組件的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 舊項(xiàng)目升級(jí)新版Unity2021導(dǎo)致Visual?Studio無(wú)法使用的問(wèn)題

    舊項(xiàng)目升級(jí)新版Unity2021導(dǎo)致Visual?Studio無(wú)法使用的問(wèn)題

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,不可避免的會(huì)升級(jí)開(kāi)發(fā)工具。這次我在舊項(xiàng)目版本升級(jí)到新版Unity2021.2.x時(shí),出現(xiàn)Visual?Studio無(wú)法定位等問(wèn)題,這里我給大家分享下解決方法,舊項(xiàng)目升級(jí)新版Unity2021導(dǎo)致Visual?Studio無(wú)法使用的問(wèn)題,需要的朋友可以參考下
    2021-12-12
  • c# volatile 關(guān)鍵字的拾遺補(bǔ)漏

    c# volatile 關(guān)鍵字的拾遺補(bǔ)漏

    這篇文章主要介紹了c# volatile 關(guān)鍵字的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

增城市| 报价| 景洪市| 四会市| 德安县| 南召县| 东海县| 左云县| 农安县| 鄂温| 怀宁县| 屏东县| 叶城县| 宁武县| 邵阳市| 太仆寺旗| 苍南县| 麦盖提县| 丹东市| 丹阳市| 鹤山市| 南昌市| 苍溪县| 寻甸| 孝感市| 青阳县| 贺兰县| 遵义县| 毕节市| 石首市| 阳朔县| 栾川县| 渭南市| 正镶白旗| 策勒县| 平潭县| 金溪县| 抚州市| 南郑县| 斗六市| 延吉市|