Работа с файлами .zip
возможна с использованием System.IO.Compression.ZipArchive
и связанных классов.Вы уже используете ZipFile.ExtractToDirectory
, что является правильным подходом здесь.Однако проблема, с которой вы сталкиваетесь, скорее связана с разрешениями.
Приложения UWP помещаются в «песочницу», что означает, что по умолчанию им не разрешено касаться расположения файловой системы.Это необходимо для обеспечения большей безопасности и упрощения удаления приложений.Однако это означает, что вы не можете легко создать файл на рабочем столе пользователя , поскольку ваше приложение не имеет доступа к нему.Единственные папки, к которым ваше приложение может иметь свободный доступ, - это те, к которым ApplicationData.Current
имеет доступ, а затем те, к которым оно декларирует доступ в манифесте приложения.Вы также можете объявить широкий доступ к файловой системе, чтобы получить доступ ко всем расположениям на ПК.
Чтобы еще больше усложнить это, в UWP существует два типа API ввода / вывода.Современный StorageFile
API, который async
включен, но чуть медленнее, и классический API для ввода / вывода файлов в C #, который включает ZipFile
и ZipArchive
.Основным недостатком классических API является то, что они всегда имеют доступ только к папкам приложений , и вы никогда не сможете получить доступ к любым другим системным путям, даже если вы объявите широкий доступ к файловой системе.
Однако даже без объявления широких возможностей доступа к файловой системе вы можете вручную получить доступ к папке / файлу по выбору пользователя, используя FolderPicker
, FileOpenPicker
и FileSavePicker
.Используя их, вы можете позволить пользователю выбрать место назначения, в котором вы будете сохранять файл или открыть файл.
Наконец - чтобы обойти ограничение невозможности использования классических API-интерфейсов файлового ввода-вывода, вы можете сначалаРаспакуйте файл .zip
во временную папку внутри ApplicationData.Current.LocalFolder
, а затем используйте метод StorageFile.MoveAndReplaceAsync(IStorageFile)
или StorageFile.MoveAsync(IStorageFolder)
, чтобы переместить файлы в папку, выбранную пользователем, с помощью FileSavePicker
.
.информацию, которую вы можете прочитать в этом блоге с руководством по использованию .zip
в UWP.