最新国产好看的视频,伊人天堂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);
                         }
                     }
                 }

總結(jié)

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

相關(guān)文章

  • C#中閉包概念講解

    C#中閉包概念講解

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

    C# 中類型轉(zhuǎn)換方式之顯式轉(zhuǎn)換和 as 運算符

    在 C# 中,有兩種常見的類型轉(zhuǎn)換方式:顯式轉(zhuǎn)換和as 運算符,它們用于在不同類型之間進行轉(zhuǎn)換,以下是對這兩種轉(zhuǎn)換方式的詳細解釋和示例說明,感興趣的朋友跟隨小編一起看看吧
    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
  • 最新評論

    贵州省| 阜宁县| 平昌县| 南木林县| 昌图县| 昌宁县| 云和县| 曲麻莱县| 工布江达县| 蒲城县| 广安市| 肇庆市| 宣武区| 芦溪县| 罗平县| 慈溪市| 百色市| 蒙城县| 罗田县| 龙里县| 鄯善县| 安远县| 嘉禾县| 渝中区| 金山区| 望江县| 平和县| 三门峡市| 习水县| 德钦县| 莲花县| 阜阳市| 寿光市| 三明市| 蚌埠市| 大田县| 白山市| 乌拉特前旗| 光泽县| 灯塔市| 西盟|