在UWP中存储用户可访问文件的位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UWP中存储用户可访问文件的位置?相关的知识,希望对你有一定的参考价值。
我这里有一个跨平台的应用程序,它使用DependencyService
来获取我的日志文件的文件路径。这适用于ApplicationData.Current.LocalCacheFolder.Path
,但现在应该使用户可以访问日志文件。想法是用户将他的设备插入PC,从中复制日志文件,然后通过普通电子邮件发送给我。 (目前,不打算通过商店分发应用程序,并且无法保证用户在其设备上设置了电子邮件帐户。)
首先,我尝试使用KnownFolders.DocumentsLibrary
,但在这里我得到了Access is denied
。如果我查看documentation,此文件夹不适合我使用。其他地方似乎也不合适。
这种方法在UWP中是否可行?
你需要添加Capabilities的documentsLibrary
来访问KnownFolders.DocumentsLibrary
要添加到YourApp.UWP
>“Capability”选项卡中的“Package.appxmanifest”,并检查要存储的功能。示例:“图片库”或“可移动存储”
新考虑:
我发现,Access denied
只出现在桌面上,而不是移动设备上。之后,我找到了this post,它描述了为什么会这样。这是因为permission handling,我扔掉了我的权限。有几种可能性如何处理这种情况:
- 使用选择器询问用户
- 使用
FutureAccessList
例:
FolderPicker folderPicker = new FolderPicker();
folderPicker.FileTypeFilter.Add("*");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder);
}
StorageFolder newFolder;
newFolder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("PickedFolderToken");
await newFolder.CreateFileAsync("test.txt");
- 使用流而不是路径(对于库)
- 制作文件的副本并将其存储到application data folder中
例:
StorageFolder tempFolder = await StorageFolder.GetFolderFromPathAsync(Path.Combine(ApplicationData.Current.LocalCacheFolder.Path, "YourApp"));
StorageFile tempFile = await tempFolder.CreateFileAsync(Path.GetFileName(pathToAttachment), CreationCollisionOption.ReplaceExisting);
await file.CopyAndReplaceAsync(tempFile);
老答案:
我目前的解决方案是我在我的应用程序中提供了一个按钮,通过FolderPicker
本地调用DependencyService
,仅在UWP上调用。有了这个,用户可以选择位置,然后将文件复制到此位置。很好地工作,尽管我希望我不必只为一个平台做一些事情。
以上是关于在UWP中存储用户可访问文件的位置?的主要内容,如果未能解决你的问题,请参考以下文章