首页 > 其他分享 >C# 压缩和解压缩文件 (System.IO.Compression.ZipFile)

C# 压缩和解压缩文件 (System.IO.Compression.ZipFile)

时间:2024-07-01 11:09:09浏览次数:18  
标签:文件 String zip 存档 ZipFile 指定 压缩文件 目录 Compression

参考文档:

https://learn.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-8.0&redirectedfrom=MSDN

https://blog.csdn.net/lvmingzhou/article/details/134161441

 

操作 zip 存档及其文件的方法分布在三个类中: ZipFile、 ZipArchive和 ZipArchiveEntry。

从目录Create zip 存档 ZipFile.CreateFromDirectory
将 zip 存档的内容提取到目录 ZipFile.ExtractToDirectory
将新文件添加到现有 zip 存档 ZipArchive.CreateEntry
检索 zip 存档中的文件 ZipArchive.GetEntry
检索 zip 存档中的所有文件 ZipArchive.Entries
打开 zip 存档中包含的单个文件的流 ZipArchiveEntry.Open
从 zip 存档中删除文件 ZipArchiveEntry.Delete

 

示例:

using System;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string startPath = @".\start";
        string zipPath = @".\result.zip";
        string extractPath = @".\extract";

        ZipFile.CreateFromDirectory(startPath, zipPath);

        ZipFile.ExtractToDirectory(zipPath, extractPath);
    }
}

方法

CreateFromDirectory(String, Stream)

在包含指定目录中的文件和目录的指定流中创建 zip 存档。

CreateFromDirectory(String, Stream, CompressionLevel, Boolean)

在包含指定目录中的文件和目录的指定流中创建 zip 存档,使用指定的压缩级别,并选择性地包含基目录。

CreateFromDirectory(String, Stream, CompressionLevel, Boolean, Encoding)

在包含指定目录中的文件和目录的指定流中创建 zip 存档,对条目名称使用指定的压缩级别和字符编码,并选择性地包含基目录。

CreateFromDirectory(String, String)

创建 zip 存档,该存档包含指定目录的文件和目录。

CreateFromDirectory(String, String, CompressionLevel, Boolean)

创建 zip 存档,该存档包括指定目录的文件和目录,使用指定压缩级别,以及可以选择包含基目录。

CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding)

创建 zip 存档,该存档包括文件和指定目录的目录,使用指定压缩级别和条目名称的字符编码,以及可以选择包含基目录。

ExtractToDirectory(Stream, String)

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统上的指定目标目录中。

ExtractToDirectory(Stream, String, Boolean)

从指定流中存储的 zip 存档中提取所有文件,并将其置于文件系统上的指定目标目录中,并选择性地允许选择是否应覆盖目标目录中的文件。

ExtractToDirectory(Stream, String, Encoding)

从指定流中存储的 zip 存档中提取所有文件,并将其放在文件系统的指定目标目录中,并使用指定的字符编码作为条目名称。

ExtractToDirectory(Stream, String, Encoding, Boolean)

从指定流中存储的 zip 存档中提取所有文件,并将其放在文件系统上的指定目标目录中,对条目名称使用指定的字符编码,并选择性地允许选择是否应覆盖目标目录中的文件。

ExtractToDirectory(String, String)

将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

ExtractToDirectory(String, String, Boolean)

将指定存档中的所有文件都解压缩到文件系统的某目录下。

ExtractToDirectory(String, String, Encoding)

将指定 zip 存档中的所有文件解压缩到文件系统的一目录下,并使用项名称的指定字符编码。

ExtractToDirectory(String, String, Encoding, Boolean)

将指定存档中的所有文件都解压缩到文件系统的某目录下。

Open(String, ZipArchiveMode)

以指定的模式打开指定路径上的 zip 归档。

Open(String, ZipArchiveMode, Encoding)

在指定的模式中用指定的项名称汉字解码打开指定路径的 zip 存档。

OpenRead(String)

打开在指定路径用于读取的 zip 存档。

 

 

自己的例子:

    public  class ZipHelper
    {



        /// <summary>
        /// ZIP解压文件
        /// </summary>
        /// <param name="zipFilePath">zip文件路径</param>
        /// <param name="extractPath">解压后保存文件的目录</param>
        public static void ExtractZipFile(string zipFilePath, string extractPath)
        {
            // 确保提取路径存在
            if (!Directory.Exists(extractPath))
            {
                Directory.CreateDirectory(extractPath);
            }
            

            using (var archive = ZipFile.OpenRead(zipFilePath))
            {
                foreach (var entry in archive.Entries)
                {
                    // 正确地处理文件夹结构
                    string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName));
                    //if (!destinationPath.StartsWith(extractPath, StringComparison.OrdinalIgnoreCase))
                    //{
                    //    throw new IOException("试图解压的文件超出了目标文件夹的路径边界。");
                    //}

                    if (entry.Name == "") // Entry是一个文件夹
                    {
                        Directory.CreateDirectory(destinationPath);
                    }
                    else // Entry 是一个文件
                    {
                        entry.ExtractToFile(destinationPath, overwrite: true);
                    }
                }
            }
        }
    }

 

标签:文件,String,zip,存档,ZipFile,指定,压缩文件,目录,Compression
From: https://www.cnblogs.com/fireicesion/p/18277663

相关文章

  • 压缩文件时的奇怪行为
    非常奇怪,我有一个Python脚本和一个bat文件,它可以在Windows7机器上通过遍历文件并逐个压缩来压缩文件。但奇怪的是,它总是停在248个文件处,尽管该目录中有700多个文件(我只是压缩了整个文档文件夹)。当我使用Winrar而不是7zip时,也出现了同样的情况,我不明白......
  • MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION翻译
    摘要:深度神经网络(DNNs)继续取得重大进展,解决了从图像分类到翻译或增强学习的任务。这个领域的一个受到广泛关注的方面是在资源受限环境中(如移动或嵌入式设备)高效执行深度模型。本文聚焦于这一问题,并提出了两种新的压缩方法,这两种方法共同利用了权重量化和大型网络(称为“教师”网络)......
  • 掌握WinRAR:全面指南到压缩文件的完整性测试
    掌握WinRAR:全面指南到压缩文件的完整性测试引言在数字化时代,我们经常需要压缩和解压文件以节省空间或便于传输。WinRAR作为业界领先的压缩工具之一,不仅提供了强大的压缩算法,还具备了测试压缩文件完整性的功能,确保数据的安全性和完整性。本文将带你深入了解如何使用WinRAR......
  • 前端JSZip结合file-saver下载文件打包导出压缩文件
    需求场景:前端拿到下载文件的url,请求并将文件进行分类压缩生成压缩包导出前端导出文件的优点:减轻服务器负担:后端生成压缩文件可能会占用服务器资源和时间。如果压缩的内容很大,可能会导致服务器压力增加,影响其他用户的访问速度。将这些任务转移到前端可以减轻服务器负担,提高......
  • 使用powershell脚本,自动压缩文件夹,实现备份功能
    担心数据丢失?教你3分钟实现自动压缩,备份文件夹。最近在使用obsidian,想要在多台电脑上访问一个同一个仓库,所以我把obsidian-vault设置在了mac-mini的共享文件夹上。但是有一个问题,mac-mini上边的硬盘是我的闲置硬盘,随时都可能挂掉。一、通过脚本自动备份为了避免obsidian......
  • SACK压缩SACK compression
      当TCP收到乱序数据包时,它会立即发送一个SACK(选择确认)数据包,这会产生网络负载,同时迫使接收方发送1-MSS的病态数据包,增加其重传(RTX)队列的长度/深度,从而增加处理时间。WiFi网络会受到这种激进行为的影响,但一般来说,当网络拥塞时,这些SACK数据包会火上浇油,使情况更加糟糕。......
  • 长城电脑压缩文件丢失了怎么办?怎么解决
    在数字化时代,电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌,以其稳定可靠的性能赢得了广大用户的信赖。然而,即便是可靠的电脑,也难免会遇到一些问题。其中,压缩文件丢失无疑是一个令人头疼的难题。本文将围绕这一问题,探讨其可能的原因,并提供相应的解决......
  • Nginx R31 doc-11-Compression and Decompression 压缩与解压缩
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat压缩与解压缩压缩服务器响应,或者对不支持压缩的客户端进行......
  • CMU 15-445 Lecture #05: Storage Models & Compression笔记总结(上)
    这是cmu15-445第五节课程StorageModels&Compression的上半部分,主要包括StorageModels的内容,压缩部分下次再整理,学完这部分可以去做hw2的第一部分课程主页:CMU15-445/645::IntrotoDatabaseSystems(Fall2023)(有几张图片目前没上传,过两天补一下)DatabaseWorkloads......
  • MacOS开发-用命令行压缩文件
    原文链接:https://blog.csdn.net/zzl819954692/article/details/99554286MacOS开发-用命令行压缩文件在MacOSX中,你可以通过右键上下文菜单中的”压缩xxx“选项制作压缩文件,但是,该方式创建的压缩文件和通过命令行zip创建的压缩文件不同。这种区别至少影响了Apple提供的一项服务......