修改:关于路径问题。我稍后会尝试到达那里。目前,我只需要压缩文件的帮助。尚无法找到一种方法。
我目前正在学习一些基础知识,我不知道要达到自己想要的位置我需要寻找什么。那么,我的目标是什么?:
我想在name.json
C:\Users\Username\Desktop
文件
然后我想将name.json
压缩为一个zip文件。
我还在桌面上创建了另一个文件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);
}
答案 0 :(得分:3)
可以使用.zip
和相关类来处理System.IO.Compression.ZipArchive
文件。您已经在使用ZipFile.ExtractToDirectory
,这是正确的方法。但是,您面临的问题与权限有关。
UWP应用被沙盒化,这意味着默认情况下不允许它们接触任何文件系统位置。这是为了确保更好的安全性和更轻松的应用卸载。但是,这意味着您无法轻松在用户的桌面上创建文件,因为您的应用没有访问权限。您的应用程序只能自由访问的文件夹是ApplicationData.Current
可以访问的文件夹,然后它声明了在应用程序清单中访问的文件夹。您还可以在此处声明对文件系统的广泛访问,以访问PC上的所有位置。
为了使这一点更加复杂,UWP中有两种类型的I / O API。启用StorageFile
的现代async
API,但速度稍慢,而C#中的经典文件I / O API包括ZipFile
和ZipArchive
。 经典API 的主要缺点是它们始终仅具有对应用程序文件夹的访问权限,即使声明了广泛的文件系统访问权限,您也永远无法访问任何其他系统路径。 / p>
但是,即使不声明广泛的文件系统访问能力,您也可以使用 FolderPicker
, FileOpenPicker
和FileSavePicker
来手动访问用户选择的文件夹/文件。使用这些,您可以让用户选择保存文件或打开文件的目的地。
最后-为了避免无法使用经典文件I / O API的限制,您可以先将.zip
文件解压缩到ApplicationData.Current.LocalFolder
内的临时文件夹中,然后再使用{{ 1}}或StorageFile.MoveAndReplaceAsync(IStorageFile)
方法将文件移动到用户使用StorageFile.MoveAsync(IStorageFolder)
选择的位置。
有关更多信息,您可以查看this blog post以及有关在UWP中使用FileSavePicker
的教程。