zoukankan      html  css  js  c++  java
  • 02 C# 文件压缩与解压

    一、使用System.IO.Compression.ZipFile进行文件压缩与解压

    System.IO.Compression 命名空间包含以下类型来对文件和流进行压缩或解压缩。 还可以使用这些类型来读取和修改压缩文件的内容。System.IO.Compression.ZipFile可以使用NuGet下载安装。主要包含以下函数:

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

    public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName);
    

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

    public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName);
    

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

    public static System.IO.Compression.ZipArchive Open (string archiveFileName, System.IO.Compression.ZipArchiveMode mode);
    

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

    public static System.IO.Compression.ZipArchive OpenRead (string archiveFileName);
    

    使用中,发现当解压文件夹所在目录中包含与待解压文件中重复的文件时会报错。此时,可以先遍历待解压文件,删除解压文件夹所在目录中的重复文件,然后再解压,具体如下:

        /// <summary>
        /// ZipFile: https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile.extracttodirectory?view=net-5.0
        /// 压缩与解压: https://docs.microsoft.com/zh-cn/dotnet/standard/io/how-to-compress-and-extract-files
        /// </summary>
        public static class ZipFile
        {
            /// <summary>
            /// 创建压缩文件
            /// </summary>
            /// <param name="startPath"></param>
            /// <param name="zipPath"></param>
            public static void CreateFromDirectory(string startPath, string zipPath)
            {
                System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);
            }
    
            /// <summary>
            /// 解压ZIP文件
            /// </summary>
            /// <param name="zipPath">压缩文件路径</param>
            /// <param name="extractPath">解压文件夹路径</param>
            /// <param name="IsDeleteOldFile">是否删除已存在的指定的目录文件</param>
            public static void ExtractToDirectory(string zipPath, string extractPath, bool IsDeleteOldFile=false)
            {
                if (IsDeleteOldFile)
                {
                    using (var archive = System.IO.Compression.ZipFile.OpenRead(zipPath))
                    {
                        foreach (var entry in archive.Entries)
                        {
                            string filePath = $"{extractPath}\{entry.FullName}";
                            if (File.Exists(filePath))
                            {
                                File.Delete(filePath);
                            }
                        }
                    }
                }
                System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);
            }
        }
    
  • 相关阅读:
    fiddler 保存请求数据并发送到自己的服务器接口
    入门chrome插件开发教程和经验总结,一篇就搞掂!
    文件图标SVG
    银行开发平台
    银联号
    数学好玩 沛沛猜想
    Jenkins安装 maven插件
    jQuery的on绑定click和直接绑定click区别
    PC与移动端都可以使用的横向导航,可点击可滑动
    layui加载层(有文字提示版)跳出iframe父级
  • 原文地址:https://www.cnblogs.com/dongweian/p/14815495.html
Copyright © 2011-2022 走看看