C#壓縮和解壓文件的兩種方法
這里用兩種方法實現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#壓縮和解壓文件的資料請關注腳本之家其它相關文章!
相關文章
VS2022+unity3D開發(fā)環(huán)境搭建的實現步驟
本文主要介紹了VS2022+unity3D開發(fā)環(huán)境搭建的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
C#中使用IFormattable實現自定義格式化字符串輸出示例
這篇文章主要介紹了C#中使用IFormattable實現自定義格式字符串輸出示例,本文直接給出實例代碼,需要的朋友可以參考下2015-06-06

