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

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

 更新時間:2024年08月14日 09:45:16   作者:△曉風殘月〆  
在C#中,我們可以使用內置的System.IO命名空間下的幾個類來處理文件的壓縮和解壓縮,主要涉及到兩個常用的庫:System.IO.Compression和WinRAR,以下是使用這些類進行文件壓縮和解壓縮的基本步驟,需要的朋友可以參考下

這里用兩種方法實現C#壓縮和解壓文件

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

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

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

public static void CreateFromDirectory(
    string sourceDirectoryName,
    string destinationArchiveFileName
 )

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

測試代碼如下:

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

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

運行

結果如下:

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

運行結果如下

解壓zip壓縮文件

使用 ZipFile類的ExtractToDirectory()方法

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

運行結果如下

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

添加文件到現有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");                                      
                 }
             }

運行結果如下

創(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);
                         }
                     }
                 }
             }
         }

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

1、壓縮文件里只能有一個文件

2、壓縮后的文件名要帶上壓縮文件里文件的后綴名。如有一個圖像文件為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提供了一個控制臺版本的exe,我們可以調用這個exe來壓縮和解壓文件

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

這個exe不依賴其它的庫,這里我們直接拷到項目的運行目錄下

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

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

語法如下: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();
         }

運行結果如下

打開D盤,會看到test.rar

解壓Rar壓縮文件

語法如下: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();

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

首先準備一個RAR文件,一個圖片文件

   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í)行完成后,會發(fā)現圖片文件變大了

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

以上就是C#壓縮和解壓文件的兩種方法的詳細內容,更多關于C#壓縮和解壓文件的資料請關注腳本之家其它相關文章!

相關文章

  • C#采用OpenXml實現給word文檔添加文字

    C#采用OpenXml實現給word文檔添加文字

    這篇文章主要介紹了C#采用OpenXml實現給word文檔添加文字的方法,包括了用法的實例分析,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • VS2022+unity3D開發(fā)環(huán)境搭建的實現步驟

    VS2022+unity3D開發(fā)環(huán)境搭建的實現步驟

    本文主要介紹了VS2022+unity3D開發(fā)環(huán)境搭建的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C# 面向對象的基本原則

    C# 面向對象的基本原則

    什么是面向對象的基本原則?設計原則是基本的工具,應用這些規(guī)則可以使你的代碼更加靈活、更容易維護,更容易擴展。
    2009-11-11
  • Unity之跑馬燈抽獎效果單抽與連抽(附demo)

    Unity之跑馬燈抽獎效果單抽與連抽(附demo)

    這篇文章主要介紹了Unity之跑馬燈抽獎效果單抽與連抽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • c# Thread類的用法詳解

    c# Thread類的用法詳解

    這篇文章主要介紹了c# Thread類的用法的相關資料,幫助大家更好的理解和學習c#的相關知識,感興趣的朋友可以了解下
    2020-11-11
  • c#高效比對大量圖片的實例代碼

    c#高效比對大量圖片的實例代碼

    以前傳統的比較方式是遍歷圖片中的每一個像素,然后進行比對。這樣的比對在少量圖片的比對上雖然效率低一點,但是也沒有什么不好。但是在大量圖片比對的時候,過長的反應時間和對服務器比較高的消耗肯定是不行的,下面介紹下新的方法
    2013-10-10
  • Unity實現物體跟隨鼠標移動

    Unity實現物體跟隨鼠標移動

    這篇文章主要為大家詳細介紹了Unity實現物體跟隨鼠標移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#實現讀取被進程占用的文件實現方法

    C#實現讀取被進程占用的文件實現方法

    這篇文章主要介紹了C#實現讀取被進程占用的文件實現方法,涉及C#進程操作及文件讀取的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#生成圖表的五種終極方案和避坑指南

    C#生成圖表的五種終極方案和避坑指南

    在現代應用程序中,數據可視化是一個重要的功能,它可以幫助用戶更直觀地理解數據,在C# WPF(Windows Presentation Foundation)中,有多種方式可以生成圖表,以下是五種常見的方法,每種方法都有其獨特的優(yōu)勢和局限,需要的朋友可以參考下
    2025-09-09
  • C#中使用IFormattable實現自定義格式化字符串輸出示例

    C#中使用IFormattable實現自定義格式化字符串輸出示例

    這篇文章主要介紹了C#中使用IFormattable實現自定義格式字符串輸出示例,本文直接給出實例代碼,需要的朋友可以參考下
    2015-06-06

最新評論

万山特区| 达尔| 沙雅县| 理塘县| 聂荣县| 中西区| 昭苏县| 利辛县| 吉木乃县| 大洼县| 桦南县| 遂川县| 民乐县| 寻甸| 和平县| 临沭县| 阿合奇县| 拉萨市| 吴旗县| 沈丘县| 阜城县| 融水| 武功县| 小金县| 侯马市| 宁南县| 新巴尔虎右旗| 博湖县| 徐闻县| 合肥市| 八宿县| 平遥县| 伊春市| 兴义市| 江安县| 吴堡县| 沧源| 秦皇岛市| 舟山市| 元谋县| 阜新|