Создание / Запись / Zip / Распаковать файл в UWP - PullRequest
0 голосов
/ 17 сентября 2018

edit : О проблеме пути. Я постараюсь добраться туда позже. На данный момент мне просто нужна помощь для zip файла. Не удалось найти способ сделать это.


В настоящее время я прохожу некоторые основы, и я не знаю, что мне нужно искать, чтобы добраться туда, где я хочу быть. Итак, каковы мои цели?:

  1. Я хочу создать name.json файл здесь C:\Users\Username\Desktop

  2. Затем я хочу сжать name.json в zip-файл.

  3. Я также создал еще один файл Testfile.zip на рабочем столе. Я хочу распаковать этот файл.

Пока что я создал name.json файл. Но я не могу найти решение о том, как создать его на рабочем столе.

Пока не могу найти решение по сжатию name.json.

    public MainPage()
    {
        this.InitializeComponent();
        createJson();
        UnzipFile();
    }

    public async void createJson()
    {
        string text = "This text";

        string json = JsonConvert.SerializeObject(text);

        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("name.json");
        await FileIO.WriteTextAsync(file, json);
    }

    public async void UnzipFile()
    {
        var localFolder = ApplicationData.Current.LocalFolder;
        var archive = await localFolder.GetFileAsync("Testfile.zip");
        ZipFile.ExtractToDirectory(archive.Path, localFolder.Path);
    }

1 Ответ

0 голосов
/ 17 сентября 2018

Работа с файлами .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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...