【问题标题】:ZipFile.CreateFromDirectory UnauthorizedAccessExceptionZipFile.CreateFromDirectory UnauthorizedAccessException
【发布时间】:2021-07-22 09:33:08
【问题描述】:

我正在尝试使用以下语法在 .NET 5.0 中创建一个 Zip 文件:

ZipFile.CreateFromDirectory(sourceDirectoryName, zipFilePath, CompressionLevel.Fastest, true);

问题是,有一个我没有读取权限的子目录。因此,我总是收到UnauthorizedAccessException 并且压缩过程中止。有没有办法跳过这个未经授权的文件夹?

【问题讨论】:

    标签: c# .net .net-core zip .net-5


    【解决方案1】:

    正如您从 the source code for ZipFile.CreateFromDirectory 中看到的那样,您无法提供任何参数来抑制该异常。

    public static void CreateFromDirectory(
        string sourceDirectoryName, 
        string destinationArchiveFileName, 
        CompressionLevel compressionLevel, 
        bool includeBaseDirectory, 
        Encoding? entryNameEncoding) =>
            DoCreateFromDirectory(
                sourceDirectoryName, 
                destinationArchiveFileName, 
                compressionLevel, 
                includeBaseDirectory, 
                entryNameEncoding);
    
    private static void DoCreateFromDirectory(
        string sourceDirectoryName, 
        string destinationArchiveFileName,
        CompressionLevel? compressionLevel, 
        bool includeBaseDirectory, 
        Encoding? entryNameEncoding) { ... }
    

    这给你留下了几个选择:

    1. Copy the method 并根据您的需要进行必要的编辑。
    2. 遍历树,列出所有可访问文件,然后使用 ZipFileUtils.EntryFromPath 手动制作 ZIP 存档。
    3. 将要压缩的所有文件复制/硬链接到一个临时文件夹,同时跳过不可访问的文件并改为压缩该文件夹。

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多