-2

我无法使用 StorageFolder.GetFolderFromPathAsync("C:\Users\Public\Documents") 从 x86 机器上运行的 Windows 商店应用程序访问 C:\Users\Public\Documents 文件夹。它在我的 win8 桌面上运行良好。知道为什么我会收到此错误吗?谢谢,MetroUI。

4

2 回答 2

0

JB 是对的,由于沙盒限制,您无法直接访问该文件夹,但您可以采用其他 2 种可能更适合您的方法。

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

var folder = KnownFolders.DocumentsLibrary;

请记住,您需要公司帐户才能将具有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();
于 2013-04-03T05:11:15.743 回答
0

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

如果您想从沙箱外部获取文件,则必须使用 aFileOpenPicker并让用户选择文件

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);
}

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

于 2013-04-02T10:24:19.610 回答