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

C# ZipArchive加壓解壓zip文件方式

 更新時間:2025年11月06日 14:11:58   作者:mouka~  
本文介紹了一種在內(nèi)存中創(chuàng)建zip文件并獲取其流的方法,從而避免了創(chuàng)建臨時文件和下載文件的需要,最后展示了如何解壓該zip文件

創(chuàng)建zip文件

using (var fileStream = new FileStream(saveZipName, FileMode.CreateNew))
{
    // 使用內(nèi)存流創(chuàng)建壓縮文件
    using (var archive = new ZipArchive(fileStream, ZipArchiveMode.Create, true))
    {
        var files = Directory.GetFiles(taskDir, "*", SearchOption.AllDirectories);

        foreach (var file in files)
        {
            //相對路徑
            var relativePath = Path.GetRelativePath(FileAndFolderConfig.CollectionSpaceFolder.Path, file);

            archive.CreateEntryFromFile(file, relativePath);
        }
    }
}

獲取zip文件流,在內(nèi)存中創(chuàng)建zip文件避免創(chuàng)建臨時文件

using (var memoryStream = new MemoryStream())
{
    // 使用內(nèi)存流創(chuàng)建壓縮文件
    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    {
        var files = Directory.GetFiles(taskDir, "*", SearchOption.AllDirectories);

        foreach (var file in files)
        {
            //相對路徑
            var relativePath = Path.GetRelativePath(FileAndFolderConfig.CollectionSpaceFolder.Path, file);
            var entry = archive.CreateEntry(relativePath, CompressionLevel.Optimal);

            using var entryStream = entry.Open();
            using var fileStream = File.OpenRead(file);
            await fileStream.CopyToAsync(entryStream);
        }
    }
    memoryStream.Position = 0; // 重置流位置
}

下載文件并解壓

                 // 下載文件到內(nèi)存流
                 using (var memoryStream = new MemoryStream())
                 {
                     await taskFile.CopyToAsync(memoryStream);
                     taskFile.Close();
                     memoryStream.Position = 0; // 重置流位置
                     using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Read))
                     {
                         foreach (var entry in archive.Entries)
                         {
                             var entryOutputPath = Path.Combine(FileAndFolderConfig.CollectionSpaceFolder.Path, entry.FullName);
                             // 如果是目錄條目,創(chuàng)建目錄
                             if (string.IsNullOrEmpty(entry.Name))
                             {
                                 Directory.CreateDirectory(Path.GetDirectoryName(entryOutputPath));
                                 continue;
                             }
                             // 確保父目錄存在
                             var parentDir = Path.GetDirectoryName(entryOutputPath);
                             if (!string.IsNullOrEmpty(parentDir))
                             {
                                 Directory.CreateDirectory(parentDir);
                             }
                             // 解壓文件
                             entry.ExtractToFile(entryOutputPath, overwrite: true);
                         }
                     }
                 }

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • c#實現(xiàn)ini文件讀寫類分享

    c#實現(xiàn)ini文件讀寫類分享

    c#實現(xiàn)ini文件讀寫類分享,大家參考使用吧
    2013-12-12
  • C#利用System.Threading.Thread.Sleep即時輸出信息的詳解

    C#利用System.Threading.Thread.Sleep即時輸出信息的詳解

    本篇文章是對C#利用System.Threading.Thread.Sleep即時輸出信息進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 利用C#編寫Linux守護進程實例代碼

    利用C#編寫Linux守護進程實例代碼

    如今的編程是一場程序員和上帝的競賽,程序員要開發(fā)出更大更好、傻瓜都會用到軟件,下面這篇文章主要給大家介紹了關于利用C#編寫Linux守護進程的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2018-01-01
  • C#中串口讀取問題及解決方案

    C#中串口讀取問題及解決方案

    在現(xiàn)代計算機系統(tǒng)中,串口通信仍然是許多設備和應用程序之間進行數(shù)據(jù)交換的重要方式,無論是在工業(yè)自動化、嵌入式系統(tǒng),還是在日常的硬件調試中,串口都扮演著不可或缺的角色,本文旨在深入探討C#中串口讀取問題的常見原因,并提供一系列有效的解決方案,需要的朋友可以參考下
    2024-12-12
  • C#數(shù)組反轉與排序實例分析

    C#數(shù)組反轉與排序實例分析

    這篇文章主要介紹了C#數(shù)組反轉與排序,實例分析了數(shù)組反轉與常見的排序技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#中閉包概念講解

    C#中閉包概念講解

    這篇文章主要介紹了C#中閉包概念講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C# 中類型轉換方式之顯式轉換和 as 運算符

    C# 中類型轉換方式之顯式轉換和 as 運算符

    在 C# 中,有兩種常見的類型轉換方式:顯式轉換和as 運算符,它們用于在不同類型之間進行轉換,以下是對這兩種轉換方式的詳細解釋和示例說明,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • insert語句太長用StringBuilder優(yōu)化一下

    insert語句太長用StringBuilder優(yōu)化一下

    insert語句太長用StringBuilder優(yōu)化一下,下面是示例代碼,需要的朋友可以研究研究
    2014-07-07
  • C#中委托和事件在觀察者模式中的應用實例

    C#中委托和事件在觀察者模式中的應用實例

    這篇文章主要介紹了C#中委托和事件在觀察者模式中的應用,需要的朋友可以參考下
    2014-08-08
  • C# Task異步編程的實現(xiàn)示例

    C# Task異步編程的實現(xiàn)示例

    Task提供了一種更簡潔的方式來處理異步編程,避免了傳統(tǒng)多線程編程的復雜性,本文就來介紹一下C# Task異步編程的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-01-01

最新評論

涟源市| 荔波县| 宣化县| 商水县| 安宁市| 华宁县| 扶绥县| 夹江县| 荆州市| 德庆县| 旺苍县| 盈江县| 略阳县| 辰溪县| 南乐县| 乌兰浩特市| 萝北县| 成安县| 阳高县| 芒康县| 嫩江县| 杂多县| 宜都市| 石柱| 桐梓县| 哈尔滨市| 怀仁县| 平江县| 五寨县| 新密市| 新疆| 大厂| 渭源县| 苏尼特左旗| 共和县| 阿尔山市| 郁南县| 台湾省| 大丰市| 云梦县| 南溪县|