欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#壓縮和解壓文件的兩種方法

 更新時(shí)間:2024年08月14日 09:45:16   作者:△曉風(fēng)殘?jiān)漏e  
在C#中,我們可以使用內(nèi)置的System.IO命名空間下的幾個(gè)類來處理文件的壓縮和解壓縮,主要涉及到兩個(gè)常用的庫(kù):System.IO.Compression和WinRAR,以下是使用這些類進(jìn)行文件壓縮和解壓縮的基本步驟,需要的朋友可以參考下

這里用兩種方法實(shí)現(xiàn)C#壓縮和解壓文件

1、使用System.IO.Compression名稱空間下的相關(guān)類(需引用 System.IO.Compression.FileSystem和System.IO.Compression程序集)

 創(chuàng)建zip壓縮文件

使用ZipFile類CreateFromDirectory()方法來創(chuàng)建zip壓縮文件。它有3種重載形式,這里說一下常用的兩個(gè)

public static void CreateFromDirectory(
    string sourceDirectoryName,
    string destinationArchiveFileName
 )

public static void CreateFromDirectory(
     string sourceDirectoryName,//sourceDirectoryName 要壓縮的文件夾
     string destinationArchiveFileName, //destinationArchiveFileName 壓縮后的文件名
     CompressionLevel compressionLevel,//compressionLevel 壓縮級(jí)別  Fastest-最快 NoCompression-不壓縮 Optimal-最好
     bool includeBaseDirectory //includeBaseDirectory 是否包含當(dāng)前目錄
 )

測(cè)試代碼如下:

static void Main(string[] args)
         {
             ZipFile.CreateFromDirectory("D:\\test", "D:\\a.zip");
          }

在D盤創(chuàng)建一個(gè)test目錄,里面放一張圖片,

運(yùn)行

結(jié)果如下:

static void Main(string[] args)
         {           
             ZipFile.CreateFromDirectory("D:\\test", "D:\\b.zip",CompressionLevel.Optimal,true);
         }

運(yùn)行結(jié)果如下

解壓zip壓縮文件

使用 ZipFile類的ExtractToDirectory()方法

public static void ExtractToDirectory(
    string sourceArchiveFileName,  //壓縮文件完整路徑
     string destinationDirectoryName //指定解壓文件夾
 )
static void Main(string[] args)
         {          
             ZipFile.ExtractToDirectory("D:\\a.zip", "D:\\");
        }

運(yùn)行結(jié)果如下

這里需要注意的是,如果文件已存在,會(huì)引發(fā)一個(gè)IOException

添加文件到現(xiàn)有zip壓縮文件

 using (FileStream fs = new FileStream("D:\\a.zip", FileMode.Open))
             {
                 using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
                 {
                     archive.CreateEntryFromFile("C:\\Users\\ZhaoJia\\Pictures\\1.jpg","1.jpg");                                      
                 }
             }

運(yùn)行結(jié)果如下

創(chuàng)建gz壓縮文件

使用GZipStream類來創(chuàng)建gz壓縮文件

   static void Main(string[] args)
          {
              string filePath = "D:\\test";    //要添加到壓縮文件的目錄
              string targetPath = "D:\\";      //壓縮文件存放的目錄         
  
              DirectoryInfo dirInfo = new DirectoryInfo(filePath);
  
              foreach (FileInfo fileInfo in dirInfo.GetFiles())
              {
                 using (FileStream fsorg = fileInfo.OpenRead())
                 {
                     using (FileStream fs = File.Create(targetPath + fileInfo.Name + ".gz"))
                     {
                         using (GZipStream compressionStream = new GZipStream(fs,
                             CompressionMode.Compress))
                         {
                             fsorg.CopyTo(compressionStream);
                         }
                     }
                 }
             }
         }

使用這個(gè)類來創(chuàng)建gz文件有幾個(gè)缺陷

1、壓縮文件里只能有一個(gè)文件

2、壓縮后的文件名要帶上壓縮文件里文件的后綴名。如有一個(gè)圖像文件為a.jpg,生成的gz壓縮文件名為  a.jpg.gz

解壓gz壓縮文件

    string compressFilePath = "D:\\4172212144245982608.jpg.gz";//壓縮文件名
  
              FileInfo fileInfo = new FileInfo(compressFilePath);
  
              using (FileStream originalFileStream = fileInfo.OpenRead())
              {
                  string currentFileName = fileInfo.FullName;
                  string newFileName = currentFileName.Remove(currentFileName.Length - fileInfo.Extension.Length);
  
                 using (FileStream decompressedFileStream = File.Create(newFileName))
                 {
                     using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                     {
                         decompressionStream.CopyTo(decompressedFileStream);                   
                     }
                 }
             }

2、使用WinRAR

WinRAR提供了一個(gè)控制臺(tái)版本的exe,我們可以調(diào)用這個(gè)exe來壓縮和解壓文件

WinRAR支持的格式比較多,包括RAR、7Z、ACE、ARJ、BZ2、CAB、GZ、ISO、JAR、LZH、TAR、UUE、XZ、Z、001

這個(gè)exe不依賴其它的庫(kù),這里我們直接拷到項(xiàng)目的運(yùn)行目錄下

Rar.exe支持的命令參數(shù)非常多,這里不全部介紹。有興趣的可以運(yùn)行Rar -?查看詳細(xì)的命令說明

創(chuàng)建rar壓縮文件

語(yǔ)法如下:Rar.exe a "D:\test.rar" "D:\test"

  static void Main(string[] args)
          {
              const string RARToolName = "Rar.exe";        //Rar命令行exe
              string compressionFileName = "D:\\test.rar"; //壓縮后的文件名
              string sourceFolderName = "D:\\test";        //要壓縮的文件夾
  
              Process p = new Process();
              ProcessStartInfo startInfo = new ProcessStartInfo();
              startInfo.FileName = RARToolName;
             startInfo.CreateNoWindow = false;
             startInfo.UseShellExecute = false;
             startInfo.Arguments = string.Format("{0} {1} {2}","a",compressionFileName,sourceFolderName);
             p.StartInfo = startInfo;
             p.Start();
         }

運(yùn)行結(jié)果如下

打開D盤,會(huì)看到test.rar

解壓Rar壓縮文件

語(yǔ)法如下:Rar.exe x "D:\test.rar" "D:\test"

 const string RARToolName = "Rar.exe";        //Rar命令行exe
             string compressionFileName = "D:\\test.rar"; //指定壓縮文件名
             string sourceFolderName = "D:\\test";   //要解壓到的文件夾
             Process p = new Process();
             ProcessStartInfo startInfo = new ProcessStartInfo();
             startInfo.FileName = RARToolName;
             startInfo.CreateNoWindow = false;
             startInfo.UseShellExecute = false;
             startInfo.Arguments = string.Format("{0} {1} {2}","x",compressionFileName,sourceFolderName);
             p.StartInfo = startInfo;
             p.Start();

這里還有一個(gè)操作,就是可以把圖片和RAR壓縮文件合并成一個(gè)文件

首先準(zhǔn)備一個(gè)RAR文件,一個(gè)圖片文件

   static void Main(string[] args)
         {
             string imageFilePath = "D:\\2.jpg";            //圖片文件路徑
             string rarFilePath = "D:\\test.rar";           //壓縮文件路徑
             string command = string.Format("copy /b {0} + {1} = {0}",imageFilePath,rarFilePath);  //命令
 
             Process p = new Process();
             ProcessStartInfo startInfo = new ProcessStartInfo();
             startInfo.FileName = "cmd.exe";
             startInfo.UseShellExecute = false;    
             startInfo.CreateNoWindow = false;
             startInfo.RedirectStandardInput = true;
             startInfo.RedirectStandardOutput = true;
             p.StartInfo = startInfo;          
             p.Start();
             p.StandardInput.WriteLine(command + "&exit");
             p.StandardInput.AutoFlush = true;      
             p.WaitForExit();
             p.Close();
             Console.WriteLine("執(zhí)行成功");
 }

執(zhí)行完成后,會(huì)發(fā)現(xiàn)圖片文件變大了

此時(shí)我們只要將文件后綴修改為.rar,就可以以壓縮文件的方式打開該文件。修改為.jpg,可以正常打開圖片。

以上就是C#壓縮和解壓文件的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于C#壓縮和解壓文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#如何優(yōu)雅地取消進(jìn)程的執(zhí)行之Cancellation詳解

    C#如何優(yōu)雅地取消進(jìn)程的執(zhí)行之Cancellation詳解

    本文介紹了.NET框架中的取消協(xié)作模型,包括CancellationToken的使用、取消請(qǐng)求的發(fā)送和接收、以及如何處理取消事件
    2024-12-12
  • C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本

    C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本

    KindEditor?依靠出色的用戶體驗(yàn)和領(lǐng)先的技術(shù)提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧
    2024-04-04
  • C# memcached緩存使用實(shí)例代碼

    C# memcached緩存使用實(shí)例代碼

    這篇文章主要介紹了C# memcached緩存使用實(shí)例,大家參考使用
    2013-12-12
  • C#中的XML與JSON數(shù)據(jù)處理的案例詳解

    C#中的XML與JSON數(shù)據(jù)處理的案例詳解

    在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)交換和存儲(chǔ)的需求日益增長(zhǎng),而 XML 和 JSON 成為了兩種最常用的數(shù)據(jù)格式,它們各有特點(diǎn),在不同的場(chǎng)景下有著各自的優(yōu)勢(shì),本文將從 C# 的角度出發(fā),探討如何處理這兩種數(shù)據(jù)格式,并分享一些常見的問題及解決方法,需要的朋友可以參考下
    2024-09-09
  • C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼

    C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼

    這篇文章主要介紹了C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼,需要的朋友可以參考下
    2018-03-03
  • C# SQLite執(zhí)行效率的優(yōu)化教程

    C# SQLite執(zhí)行效率的優(yōu)化教程

    這篇文章主要給大家介紹了關(guān)于C# SQLite執(zhí)行效率優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C# SQLite具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • C#多線程經(jīng)典示例(吃蘋果)

    C#多線程經(jīng)典示例(吃蘋果)

    本文主要講述了多線程開發(fā)中經(jīng)典示例,通過本示例,可以加深對(duì)多線程的理解。下面跟著小編一起來看下吧
    2017-01-01
  • 淺析c# 接口

    淺析c# 接口

    這篇文章主要介紹了c# 接口的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下。
    2020-07-07
  • C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法

    C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • C#?單例模式的多種實(shí)現(xiàn)方式

    C#?單例模式的多種實(shí)現(xiàn)方式

    單例模式是一種確保類只有一個(gè)實(shí)例的設(shè)計(jì)模式,主要用于提供全局訪問點(diǎn),C#中實(shí)現(xiàn)單例的方法多樣,包括餓漢式和懶漢式,各有優(yōu)缺點(diǎn),此外,單例模式不僅提高代碼可重用性和可讀性,還增強(qiáng)了系統(tǒng)的可維護(hù)性
    2024-11-11

最新評(píng)論