Windows store apps c:\users\public文件夹无法从x86计算机上的metro应用程序访问

Windows store apps c:\users\public文件夹无法从x86计算机上的metro应用程序访问,windows-store-apps,Windows Store Apps,我无法使用StorageFolder.GetFolderFromPathAsync(“C:\Users\Public\Documents”)从x86计算机上运行的Windows应用商店应用访问C:\Users\Public\Documents文件夹。它在我的win8桌面上运行良好。知道我为什么会犯这个错误吗? 谢谢 MetroUI。您无法使用该方法访问应用程序沙箱外部的文件系统。这将仅访问应用程序独立存储中的文件 如果要从沙箱外部获取文件,必须使用FileOpenPicker并让用户选择该文件

我无法使用StorageFolder.GetFolderFromPathAsync(“C:\Users\Public\Documents”)从x86计算机上运行的Windows应用商店应用访问C:\Users\Public\Documents文件夹。它在我的win8桌面上运行良好。知道我为什么会犯这个错误吗? 谢谢
MetroUI。

您无法使用该方法访问应用程序沙箱外部的文件系统。这将仅访问应用程序独立存储中的文件

如果要从沙箱外部获取文件,必须使用
FileOpenPicker
并让用户选择该文件

var picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;

var file = await picker.PickSingleFileAsync();
if (file != null)
{
    IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
}

然后,您将处理流中的数据。

J.B是正确的,由于沙盒限制,您无法直接访问该文件夹,但您可以采取另外两种方法,这可能更适合您

如果将
文档库
添加到应用程序的
功能
,您将能够直接访问用户文档库中的文件(除非用户更改其设置,否则文档库还应包括公共文档),只要您已为应用程序的
声明的扩展名声明了
文件类型关联
。您可以通过编辑
Package.appxmanifest
来设置这两个选项。使用以下代码访问
存储文件夹

var folder = KnownFolders.DocumentsLibrary;
请记住,将具有
文档库
功能的应用发布到Windows应用商店

或者,您可以使用
FolderPicker
,以便用户授予您对该文件夹的访问权限。在这种情况下,您不需要任何功能或声明,您将能够访问所有文件:

var picker = new FolderPicker();
picker.FileTypeFilter.Add(".txt");
var folder = await picker.PickSingleFolderAsync();
您不需要用户每次启动应用程序时都选择文件夹。您可以将其引用存储到
FutureAccessList
,以便以后访问它,并存储相应的令牌(例如到设置):

当您想再次访问文件夹时,只需使用令牌获取文件夹引用:

folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token);
var items = await folder.GetItemsAsync();

发布前搜索。谢谢JB和Damir。嗯,我的应用程序一直在工作,很好。问题是在Win8的中间版本中,默认情况下文档(public\Documents)并没有添加到“库”中。我做了这里提到的所有事情。我的意思是将文档库添加到功能中,并使用FileOpenPicker进行文件选择。我的问题的解决方案是,我必须将Win8中的公共“文档”文件夹添加到“库”中。库->属性->添加文件夹(或其他内容)。一切正常,我的代码没有任何变化。干杯!
folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token);
var items = await folder.GetItemsAsync();