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);
            }
        }
    
  • 相关阅读:
    JAVA,JSP,Servlet获取当前工程路径-绝对路径
    Oracle中Null与空字符串' '的区别
    使用JDBC调用存储过程
    oracle 11g SQL语句补充学习
    flutter 登录后跳转到根路由
    Mac下mongodb connect failed 连接错误解决方法
    flutter 新增安卓ios 闪图
    npm 发布包
    js中setTimeout() 时间参数为0
    ionic3 打包 混淆代码
  • 原文地址:https://www.cnblogs.com/dongweian/p/14815495.html
Copyright © 2011-2022 走看看