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

时间:2013-04-02 10:04:28

标签: windows-store-apps

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

2 个答案:

答案 0 :(得分:0)

您无法使用该方法访问应用沙箱外的文件系统。这只会访问您的应用隔离存储中的文件。

如果您想从沙箱外部获取文件,则必须使用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);
}

然后您将使用流中的数据。

答案 1 :(得分:0)

J.B是对的,由于沙箱的限制,您无法直接访问该文件夹,但您可以采取其他两种方法,以便更好地为您提供服务。

如果您将Documents Library添加到您应用的Capabilities,您就可以直接访问用户文档库中的文件(它还应包含公共文档,除非用户更改了他的设置,否则只要您已为该应用的File Type Association声明了该Declarations扩展程序。您可以通过编辑Package.appxmanifest来设置它们。使用以下代码访问StorageFolder

var folder = KnownFolders.DocumentsLibrary;

请注意you need a company account将具有Documents Library功能的应用发布到Windows应用商店。

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

var picker = new FolderPicker();
picker.FileTypeFilter.Add(".txt");
var folder = await picker.PickSingleFolderAsync();

每次应用启动时,您都不需要用户选择文件夹。您可以将其引用存储到FutureAccessList以便稍后访问它并存储相应的令牌(例如,设置):

var token = StorageApplicationPermissions.FutureAccessList.Add(folder);

如果您想再次访问该文件夹,只需使用该令牌获取文件夹参考:

folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token);
var items = await folder.GetItemsAsync();
相关问题