Xamarin表单文件系统访问(跨平台)

时间:2018-09-20 14:14:03

标签: c# xamarin.forms cross-platform

我正在开发一个需要完全访问文件系统的跨平台应用程序。我最终将同时定位 Windows Mac

最终,我需要能够读取/写入系统上任何位置的文件的音频文件属性(作者,流派等)。

我已将UWP应用设置为清单中具有 Broad File System Access ,但这似乎还不够:访问仍被拒绝。

  • 使用 FilePicker 可以进行首次访问,但是 应用程序将需要对文件的读/写访问权限,而无需用户 一直在捡他们

  • 代码共享策略 .NET Standard ,而不是 Shared 项目

  • 我想使用TagLib来读取/写入文件属性(欢迎使用替代方法)
  • 我的测试环境是Windows 10(因此我正在运行UWP应用)
  • 测试文件当前位于桌面上

我记得在某处看到使用 FilePicker 打开文件后,您可以在某些应用程序设置中保存引用/文件路径,这样当应用程序希望在没有用户的情况下访问文件时,访问权限将自动授予。我想尝试一下,但我不记得在哪里读。

什么是最好的方法和/或下一步?

谢谢

1 个答案:

答案 0 :(得分:1)

  

我记得曾经在某处看到过,使用FilePicker打开文件后,您可以将引用/文件路径保存在某些应用程序设置中,这样当应用程序希望在没有用户访问的情况下自动授予访问权限。

您可能需要

StorageApplicationPermissions.FutureAccessList属性。它可以用来获取代表应用程序所维护列表的对象,以便该应用程序可以存储文件和/或位置(如文件夹),并在将来轻松访问这些项目。有关使用的详细信息,请参阅以下内容。

static public string FolderAccessToken { get; set; }
private async void Pick_Button_Click(object sender, RoutedEventArgs e)
{
    var picker = new FolderPicker();
    picker.FileTypeFilter.Add(".xml");        
    var folder = await picker.PickSingleFolderAsync();
    if (folder == null)
    {
        FolderAccessToken = "";
        return;
    }

    FolderAccessToken = StorageApplicationPermissions.FutureAccessList.Add(folder);
}

private async void Get_Button_Click(object sender, RoutedEventArgs e)
{
    var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(FolderAccessToken);
}