在UWP中存储用户可访问文件的位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UWP中存储用户可访问文件的位置?相关的知识,希望对你有一定的参考价值。

我这里有一个跨平台的应用程序,它使用DependencyService来获取我的日志文件的文件路径。这适用于ApplicationData.Current.LocalCacheFolder.Path,但现在应该使用户可以访问日志文件。想法是用户将他的设备插入PC,从中复制日志文件,然后通过普通电子邮件发送给我。 (目前,不打算通过商店分发应用程序,并且无法保证用户在其设备上设置了电子邮件帐户。)

首先,我尝试使用KnownFolders.DocumentsLibrary,但在这里我得到了Access is denied。如果我查看documentation,此文件夹不适合我使用。其他地方似乎也不合适。

这种方法在UWP中是否可行?

答案

你需要添加CapabilitiesdocumentsLibrary来访问KnownFolders.DocumentsLibrary

要添加到YourApp.UWP>“Capability”选项卡中的“Package.appxmanifest”,并检查要存储的功能。示例:“图片库”或“可移动存储”

另一答案

新考虑:

我发现,Access denied只出现在桌面上,而不是移动设备上。之后,我找到了this post,它描述了为什么会这样。这是因为permission handling,我扔掉了我的权限。有几种可能性如何处理这种情况:

例:

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

例:

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中存储用户可访问文件的位置?的主要内容,如果未能解决你的问题,请参考以下文章

每个用户都无法访问UWP App

UWP 应用程序从系统上的随机位置访问文件

C#UWP:帮助创建应用程序:用户上传要从列表中存储和播放的MP3文件

C#UWP填充和访问嵌套列表

转载UWP应用设置和文件设置:科普

你可以从它的路径访问一个选择的 StorageFile 吗? - UWP