从应用程序WinRT获取本地文件夹

本文关键字:文件夹 获取 应用程序 WinRT | 更新日期: 2023-09-27 18:27:18

我在尝试将文件保存到我正在使用的WinRT应用程序的文件夹中时遇到问题。更具体的是:我无法检索文件夹。我需要保存一些文件,然后从同一个文件夹中检索它们,比如说MyFolder,它在应用程序中实际上与Assets文件夹处于同一级别。我怎样才能做到这一点?

到目前为止,我尝试了

await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("MyFolder")

await ApplicationData.Current.LocalFolder.GetFolderAsync("MyFolder");

两者似乎都告诉我,这样的文件夹并不存在。现在,我似乎不知道我是走在了正确的轨道上,还是我做了一些愚蠢的事情,导致了这个例外。我真的不能发布整个代码,因为它实际上是对一个更大的方法的调用,还有其他调用,等等

此外,我想知道(如果这些方法中有任何一种是正确的),如果应用程序得到更新,内容会受到任何影响(更好地说,丢失)。

谢谢。

从应用程序WinRT获取本地文件夹

Windows.ApplicationModel.Package.Current.InstalledLocation将为您提供由应用程序包定义的"文件系统",因此您会看到常用的Asset文件夹,例如,通过URI ms-appx:///Assets通过InstalledLocation或ms-appx方案访问的任何内容都是只读的,因为它是由您从Visual Studio部署的项目定义的。

ApplicationData.Current.LocalFolder允许您访问当前应用程序/用户拥有的"文件系统"(存储在%AppData%/Local/Packages/<yourapppackage>/LocalState)。你可以在这里创建你想要的任何结构来管理你的各种角色,并使用ms-appdata:///local/DirLeve1/DirLeve2/File3URI来访问你的文件)。这种存储是通过更新应用程序来保留的,当然,您需要一种策略来更新与新版本的应用程序交互所需的任何存储数据格式。

听起来你是在假设LocalFolder不能包含一个文件夹hiearachy;它可以,所以你可以在LocalFolder引用下有一个Recents子文件夹,并以这种方式处理事情。

我认为您需要使用ms-appx URI。类似这样的东西:

await StorageFolder.GetFolderFromPathAsync("ms-appx:///MyFolder");

此外,您需要确保该文件夹确实包含在输出中。我不太确定在C#项目中是如何做到这一点的——在C++中,这是通过将文件夹/文件的"Is Content"构建属性设置为true来实现的。