首页 > 解决方案 > C# ASP System.IO.Compression - 对多个文件使用 zipArchive.CreateEntryFromFile 时出现未经授权的访问异常()

问题描述

我有以下代码行可用于使用 ZipFile.CreateFromDirectory(selectedFile, zipPath) 创建 zip

        if (selectedFolder == string.Empty)
        {
            Console.WriteLine("Invalid folder, try again");
        }
        else
        {
            Console.WriteLine("\nSelect zipfile name: ");
            var zipName = Console.ReadLine();

            // Also available: extractToDirectory
            var zipPath = @"C:\Users\User\Documents\Dev\" + zipName + ".zip";
            ZipFile.CreateFromDirectory(selectedFolder, zipPath);

但是,除了将多个文件存档到单个 zip 文件夹中之外,以下代码应该出于所有意图和目的执行相同的操作:

public static void CreateZipFile(string folderToCreateZip, IEnumerable<string> files)
{   
    var zipPath = folderToCreateZip + "\\test6.zip";

    // Create a new ZIP in this location
    using (var zip = ZipFile.Open(zipPath, ZipArchiveMode.Create))
    {
        foreach (var file in files)
        {
            // Add entry for files
            zip.CreateEntryFromFile(file, zipPath, CompressionLevel.Optimal);
        }
    }
    // Dispose of zip object after files have been zipped
    //zip.Dispose();
}

var zip == ZipArchive zip

我已经尝试在应该创建 zip 的文件夹上禁用只读模式,但我认为这并不重要,因为使用 CreateFromDirectory() 的先前函数可以正常工作。我也试过在桌面上创建一个 ZIP,但我得到了同样的错误。

这是我得到的例外:

例外

作为一个注释,我注意到尽管有这个错误,它最初确实创建了 zip,只是它不能向它添加任何东西,不像 CreateFromDirectory() 可能是由于文件夹正在使用,没有对该区域的权限或文件夹已经存在。有没有一种方法可以让 CreateEntryFromFile() 正常工作,或者另一种方法可以用于多个文件?

标签: c#zipsystem.io.compression

解决方案


我有同样的问题。解决方案是在destinationArchiveFileName 参数中发布完整路径名(以及写入路径)。例如 c:\my apps folder\my app\my temp\zipfile.zip


推荐阅读