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