我正在尝试使用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);
}
}
我在使用目录时遇到访问冲突。
答案 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提供的官方应用程序示例,该示例演示了如何持久访问文件/文件夹。
最诚挚的问候。