从App WinRT获取本地文件夹

时间:2013-08-09 22:39:20

标签: c# windows-8 windows-runtime

我在尝试将文件保存到我正在使用的WinRT应用程序的文件夹中时出现问题。更具体:我无法设法检索该文件夹。我需要保存一些文件,然后从同一个文件夹中检索它们,让我们说MyFolder实际上与Assets文件夹在应用程序中的同一级别。我怎么能实现这样的目标呢?

到目前为止,我试过

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

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

两者似乎都告诉我这样的文件夹不存在。现在,我似乎无法弄明白,如果我走在正确的轨道上,或者这是我做过的愚蠢行为并导致异常。我不能真正发布整个代码,因为它实际上是对其他调用的更大方法的调用,等等。

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

谢谢。

2 个答案:

答案 0 :(得分:7)

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/File3 URI访问您的文件。通过对应用程序的更新来保留该存储,当然,您需要一种策略来更新与应用程序的较新版本交互所需的任何存储数据格式。

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

答案 1 :(得分:2)

我认为您需要使用ms-appx URI。像这样:

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

此外,您需要确保文件夹实际包含在输出中。我不确定你是如何在C#项目中做到的 - 在C ++中它是通过将文件夹/文件的“Is Content”构建属性设置为true。