我正在尝试用UWP在用户指定的目录中执行一些通用数据库的工作,但是我对访问权限却梦night以求。
我已经阅读了有关文件夹选择器的所有内容,但仍然没有获得天赋的访问权限。我的理解是,一旦用户选择了一个文件夹,我便可以随意使用该文件夹,但事实并非如此。
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);
}
}
我在使用目录时遇到访问冲突。
UWP通常在沙盒环境中运行。因此,它无法访问LocalFolder
,RoamingFolder
和TemporaryFolder
以外的文件夹。要访问这些文件夹以外的文件,您需要在软件包清单中添加受限功能BroadFileSystemAccess
。
BroadFileSystemAccess
一旦添加了受限功能,请部署应用程序,然后转到
Windows设置->隐私->文件系统->选择要访问文件系统的应用->%您的应用%开启
您正在使用<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp uap5 rescap">
...
<Capabilities>
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
,这是一个不错的选择,但是您使用它的方式存在问题。
这里是获取和保存FutureAccessList
的方法:
StorageFolder
使用public async Task<StorageFolder> GetFolderFromAccessList(string tokenName)
{
var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(tokenName);
return folder;
}
,您可以获得FolderPicker
对象。但是,将此对象保存到StorageFolder
时,不允许您使用路径访问该文件夹。您只能通过保存在FutureAccessList
中的令牌获取保存的文件夹对象。
因为UWP应用程序是沙箱应用程序,所以当您访问数据库时,建议您将数据库文件保存在应用程序的本地目录中,例如FutureAccessList
。不添加特殊功能就无法直接访问外部文件。
您可以找到Microsoft ApplicationData.LocalFolder
提供的官方应用程序示例,该示例演示了如何持久访问文件/文件夹。
最诚挚的问候。