C# ASP System.IO.Compression - исключение несанкционированного доступа при использовании zipArchive.CreateEntryFromFile для нескольких файлов ().

У меня есть следующие строки кода, которые работают для создания почтового индекса, используя ZipFile.CreateFromDirectory(selectedFile, zipPath)

        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() работать или альтернативу, которая будет работать для нескольких файлов?

0 ответов

У меня такая же проблема. Решением было опубликовать полное имя пути в параметре destinationArchiveFileName (а также путь, разрешенный для записи). Например, c:\my apps folder\my app\my temp\zipfile.zip

Другие вопросы по тегам