C#壓縮和解壓文件的兩種方法
這里用兩種方法實(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詳解
本文介紹了.NET框架中的取消協(xié)作模型,包括CancellationToken的使用、取消請(qǐng)求的發(fā)送和接收、以及如何處理取消事件2024-12-12C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本
KindEditor?依靠出色的用戶體驗(yàn)和領(lǐng)先的技術(shù)提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧2024-04-04C#中的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-09C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼
這篇文章主要介紹了C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼,需要的朋友可以參考下2018-03-03C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08