首页 > 解决方案 > ZipFile.CreateFromDirectory UnauthorizedAccessException

问题描述

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

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

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

标签: c#.net.net-corezip.net-5

解决方案


正如您从的源代码中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. 复制该方法并进行必要的编辑以满足您的需要。
  2. 遍历树,列出所有可访问文件,然后用于ZipFileUtils.EntryFromPath手动制作 ZIP 存档。
  3. 将要压缩的所有文件复制/硬链接到临时文件夹,同时跳过不可访问的文件并压缩该文件夹。

推荐阅读