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

问题描述 投票:0回答:2

我正在尝试用UWP在用户指定的目录中执行一些通用数据库的工作,但是我对访问权限却梦night以求。

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

  • 就像我不能从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);
        }
    }

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

c# uwp file-access
2个回答
0
投票

UWP通常在沙盒环境中运行。因此,它无法访问LocalFolderRoamingFolderTemporaryFolder以外的文件夹。要访问这些文件夹以外的文件,您需要在软件包清单中添加受限功能BroadFileSystemAccess

BroadFileSystemAccess

一旦添加了受限功能,请部署应用程序,然后转到

Windows设置->隐私->文件系统->选择要访问文件系统的应用->%您的应用%开启


0
投票

您正在使用<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提供的官方应用程序示例,该示例演示了如何持久访问文件/文件夹。

最诚挚的问候。

© www.soinside.com 2019 - 2024. All rights reserved.