您实际上如何在 UWP 中使用 FolderPicker 来授予 IO 访问权限
How do you actually use FolderPicker in a UWP to grant IO 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);
}
}
我在使用目录时遇到访问冲突。
您正在使用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。
此致。
我正尝试在用户指定的目录中使用 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);
}
}
我在使用目录时遇到访问冲突。
您正在使用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
。不加特殊Capability是不能直接访问外部文件的。
您可以找到微软here官方提供的一个应用示例,演示了如何持久访问files/folders。
此致。