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