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-12
C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本
KindEditor?依靠出色的用戶體驗(yàn)和領(lǐng)先的技術(shù)提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧2024-04-04
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í)例代碼,需要的朋友可以參考下2018-03-03
C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將PPT轉(zhuǎn)換成HTML的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08

