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

时间:2017-07-24 10:41:51

标签: c# uwp xamarin.forms filesystem-access

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

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

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

2 个答案:

答案 0 :(得分:0)

您需要添加documentsLibrary KnownFolders.DocumentsLibrary来访问YourApp.UWP

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

答案 1 :(得分:0)

新的anser:

我发现,value is 0x00100003仅发生在桌面上,而非移动版。之后,我找到了this post,它描述了为什么会这样。这是因为permission handling并且我丢弃了我的权限。如何处理这种情况有几种可能性:

示例:

Access denied

示例:

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,仅在UWP上调用。有了这个,用户可以选择位置,然后将文件复制到此位置。很好地工作,尽管我希望我不必只为一个平台做一些事情。