在UWP中创建/编写/压缩/解压缩文件

问题描述 投票:1回答:1

编辑:关于路径问题。我会试着稍后到达那里。现在我只需要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);
    }
c# json uwp zip
1个回答
3
投票

使用.zip和相关类可以使用System.IO.Compression.ZipArchive文件。您已经在使用ZipFile.ExtractToDirectory,这是正确的方法。但是,您面临的问题与权限相关。

UWP应用程序是沙盒,这意味着默认情况下不允许它们触摸任何文件系统位置。这是为了确保更好的安全性和更轻松的应用程序卸载。但这意味着您无法在用户的桌面上轻松创建文件,因为您的应用程序无权访问该文件。您的应用程序可以自由访问的唯一文件夹是ApplicationData.Current可访问的文件夹,然后是应用程序清单中声明访问权限的文件夹。您还可以在此处声明广泛的文件系统访问权限,以访问PC上的所有位置。

为了进一步复杂化,UWP中有两种类型的I / O API。启用了StorageFile的现代async API,但速度稍慢,而C#中的经典文件I / O API包括ZipFileZipArchive。经典API的主要缺点是它们始终只能访问应用程序文件夹,即使您声明了广泛的文件系统访问权限,也永远无法访问任何其他系统路径。

但是,即使没有声明广泛的文件系统访问功能,您也可以使用FolderPicker, FileOpenPickerFileSavePicker手动访问用户选择的文件夹/文件。使用这些,您可以让用户选择保存文件或打开文件的目的地。

最后 - 为了避免无法使用经典文件I / O API的限制,您可以先将.zip文件解压缩到ApplicationData.Current.LocalFolder中的临时文件夹中,然后使用StorageFile.MoveAndReplaceAsync(IStorageFile)StorageFile.MoveAsync(IStorageFolder)方法将文件移动到用户所在的位置选择使用FileSavePicker

有关更多信息,您可以查看this blog post以及在UWP中使用.zip的教程。

© www.soinside.com 2019 - 2024. All rights reserved.