UnauthorizedAccessException при попытке извлечь из ZipArchiveC#

Место общения программистов C#
Ответить
Anonymous
 UnauthorizedAccessException при попытке извлечь из ZipArchive

Сообщение Anonymous »

Я работаю над консольным приложением C#, которое загружает архив .zip со страницы выпуска GitHub и извлекает его в определенный файл локально. Процесс загрузки работает правильно, но я также собираюсь включить эту строку на случай, если с ней могут возникнуть проблемы.

Код: Выделить всё

client.DownloadFile("RELEASE-URL-HERE", "Release.zip");
using (ZipArchive archive = ZipFile.OpenRead("Release.zip"))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
Console.WriteLine("Extracting " + entry.Name);
entry.ExtractToFile(Path.Combine(@"E:\dev\winforms\pie\bin\Release", entry.Name));
}
}
Я знаю, что существует более простой процесс извлечения всех элементов из файла, но я хотел сделать это с помощью цикла foreach, чтобы иметь контроль над каждым файлом извлечены (возможно, фильтровать файлы или регистрировать определенные типы файлов).
Однако, когда начинается процесс извлечения, я получаю следующее исключение:

Код: Выделить всё

System.UnauthorizedAccessException: Access to the path 'E:\dev\winforms\pie\bin\Release' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.Compression.ZipFileExtensions.ExtractToFile(ZipArchiveEntry source, String destinationFileName, Boolean overwrite)
at pie.PieUpdater.Main()
Сначала я подумал, что это может быть из текущей папки, в которой я нахожусь, но даже при создании пустой папки по совершенно другому пути (например, E:\outputfolder) , ошибка вроде та же.
Я даже пробовал запустить исполняемый файл от имени администратора, но ничего не меняется.
Проверил ответы из «Почему доступ к пути запрещен?», и один из них, похоже, заявляют, что эта проблема возникает, когда выходной файл является каталогом, и действительно, первый элемент, который пытается быть извлечен, — это папка с именем /x64. Я на 90 % уверен, что проблема именно в этом.
Неправильный ли у меня способ работы с каталогами? Нужно ли мне вручную перемещаться по всем путям к каталогам внутри zip-архива и извлекать их в виде файлов? Или проблема возникает откуда-то еще?
Если логика обработки каталогов неверна, есть ли более простой способ извлечь архив, содержащий как каталоги, так и файлы, без необходимости обрабатывать каталоги отдельно ?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ziparchive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»