如何在UWP中实际使用FolderPicker授予IO访问权限

时间:2019-10-28 09:54:19

标签: c# uwp file-access

我正在尝试使用UWP在用户指定的目录中执行一些通用数据库的工作,但是我却遇到了访问权限的噩梦。

我已经阅读了有关文件夹选择器的所有内容,但仍然没有获得天赋的访问权限。我的理解是,一旦用户选择了一个文件夹,我便可以随意使用该文件夹,但事实并非如此。

  • 就像我不能使用UWP中的目录命令一样简单吗?
  • 是否有任何文档显示如何使用FolderPicker查询?
  • 尝试SQL连接时,我会遇到同样的噩梦吗?
    private Windows.Storage.StorageFolder _fileAccess = null;

    private async void Btn_Browse_Click(object sender, RoutedEventArgs e)
    {
        FolderPicker picker = new FolderPicker
        {
            ViewMode = PickerViewMode.List,
            SuggestedStartLocation = PickerLocationId.ComputerFolder
        };
        picker.FileTypeFilter.Add("*");

        _fileAccess = await picker.PickSingleFolderAsync();
        if (_fileAccess == null)
        {
            return;
        }

        Tbx_Directory.Text = _fileAccess.Path;

        StorageApplicationPermissions.FutureAccessList.
        AddOrReplace("PickedFolderToken", _fileAccess);


        string[] dataBases = Directory.GetFiles(_fileAccess.Path, @"*.db");

        foreach (string file in dataBases ?? Enumerable.Empty<string>())
        { 
            LBxV_Databases.Items.Add(file);
        }
    }

我在使用目录时遇到访问冲突。

1 个答案:

答案 0 :(得分:2)

您正在使用FutureAccessList,这是一个不错的选择,但是使用方式存在问题。

这是获取已保存的StorageFolder的方法:

public async Task<StorageFolder> GetFolderFromAccessList(string tokenName)
{
    var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(tokenName);
    return folder;
}

使用FolderPicker,可以获得StorageFolder对象。但是,将该对象保存到FutureAccessList不允许您访问带有路径的文件夹。您只能通过保存在FutureAccessList中的令牌获取保存的文件夹对象。

由于UWP应用程序是沙箱应用程序,因此当您访问数据库时,建议您将数据库文件保存在应用程序的本地目录中,例如ApplicationData.LocalFolder。不添加特殊功能就不能直接访问外部文件。

您可以找到Microsoft here提供的官方应用程序示例,该示例演示了如何持久访问文件/文件夹。

最诚挚的问候。