日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#?使用原生?System.IO.Compression?實現?zip?的壓縮與解壓_C#教程

作者:張曉棟 ? 更新時間: 2022-11-17 編程語言

zip 是一個非常常見的壓縮包格式,本文主要用于說明如何使用代碼 文件或文件夾壓縮為 zip壓縮包及其解壓操作,
我們采用的是 微軟官方的實現,所以也不需要安裝第三方的組件包。

使用的時候記得?using System.IO.Compression;

/// <summary>
/// 將指定目錄壓縮為Zip文件
/// </summary>
/// <param name="folderPath">文件夾地址 D:/1/ </param>
/// <param name="zipPath">zip地址 D:/1.zip </param>
public static void CompressDirectoryZip(string folderPath, string zipPath)
{
    DirectoryInfo directoryInfo = new(zipPath);

    if (directoryInfo.Parent != null)
    {
        directoryInfo = directoryInfo.Parent;
    }

    if (!directoryInfo.Exists)
    {
        directoryInfo.Create();
    }

    ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Optimal, false);
}

其中?CompressionLevel?是個枚舉,支持下面四種類型

枚舉 注解
Optimal 0 壓縮操作應以最佳方式平衡壓縮速度和輸出大小。
Fastest 1 即使結果文件未可選擇性地壓縮,壓縮操作也應盡快完成。
NoCompression 2 該文件不應執行壓縮。
SmallestSize 3 壓縮操作應盡可能小地創建輸出,即使該操作需要更長的時間才能完成。

我方法這里直接固定了采用 CompressionLevel.Optimal,大家可以根據個人需求自行調整。

/// <summary>
/// 將指定文件壓縮為Zip文件
/// </summary>
/// <param name="filePath">文件地址 D:/1.txt </param>
/// <param name="zipPath">zip地址 D:/1.zip </param>
public static void CompressFileZip(string filePath, string zipPath)
{

    FileInfo fileInfo = new FileInfo(filePath);
    string dirPath = fileInfo.DirectoryName?.Replace("\\", "/") + "/";
    string tempPath = dirPath + Guid.NewGuid() + "_temp/";
    if (!Directory.Exists(tempPath))
    {
        Directory.CreateDirectory(tempPath);
    }
    fileInfo.CopyTo(tempPath + fileInfo.Name);
    CompressDirectoryZip(tempPath, zipPath);
    DirectoryInfo directory = new(path);
    if (directory.Exists)
    {
        //將文件夾屬性設置為普通,如:只讀文件夾設置為普通
        directory.Attributes = FileAttributes.Normal;

        directory.Delete(true);
    }
}

壓縮單個文件的邏輯其實就是先將我們要壓縮的文件復制到一個臨時目錄,然后對臨時目錄執行了壓縮動作,壓縮完成之后又刪除了臨時目錄。

/// <summary>
/// 解壓Zip文件到指定目錄
/// </summary>
/// <param name="zipPath">zip地址 D:/1.zip</param>
/// <param name="folderPath">文件夾地址 D:/1/</param>
public static void DecompressZip(string zipPath, string folderPath)
{
    DirectoryInfo directoryInfo = new(folderPath);

    if (!directoryInfo.Exists)
    {
        directoryInfo.Create();
    }

    ZipFile.ExtractToDirectory(zipPath, folderPath);
}

至此 C# 使用原生 System.IO.Compression 實現 zip 的壓縮與解壓 就講解完了,有任何不明白的,可以在文章下面評論或者私信我,歡迎大家積極的討論交流,有興趣的朋友可以關注我目前在維護的一個 .NET 基礎框架項目,項目地址如下

https://github.com/berkerdong/NetEngine.git

https://gitee.com/berkerdong/NetEngine.git

原文鏈接:https://www.cnblogs.com/berkerdong/archive/2022/09/27/16733726.html

欄目分類
最近更新