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

How do you actually use FolderPicker in a UWP to grant IO access

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

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

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

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

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

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

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

通过FolderPicker,可以获得StorageFolder对象。但是将此对象保存到 FutureAccessList 不允许您访问具有路径的文件夹。只能通过保存在FutureAccessList.

中的Token获取保存的文件夹对象

由于UWP应用是一个沙盒应用,当你访问数据库的时候,我建议你把数据库文件保存在应用的本地目录下,比如ApplicationData.LocalFolder。不加特殊Capability是不能直接访问外部文件的。

您可以找到微软here官方提供的一个应用示例,演示了如何持久访问files/folders。

此致。