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

时间:2018-09-17 10:59:06

标签: c# json uwp zip

修改:关于路径问题。我稍后会尝试到达那里。目前,我只需要压缩文件的帮助。尚无法找到一种方法。


我目前正在学习一些基础知识,我不知道要达到自己想要的位置我需要寻找什么。那么,我的目标是什么?:

  1. 我想在name.json

  2. 处创建一个C:\Users\Username\Desktop文件
  3. 然后我想将name.json压缩为一个zip文件。

  4. 我还在桌面上创建了另一个文件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 :(得分: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 的主要缺点是它们始终仅具有对应用程序文件夹的访问权限,即使声明了广泛的文件系统访问权限,您也永远无法访问任何其他系统路径。 / p>

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

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

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