Как вы на самом деле используете FolderPicker в UWP для предоставления доступа к IO - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь сделать что-то общее с базой данных с помощью 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);
        }
    }

Я получаю нарушение прав доступа при использовании Справочника.

1 Ответ

2 голосов
/ 28 октября 2019

Вы используете FutureAccessList, это отличный выбор, но есть проблема с тем, как вы его используете.

Вот способ получить сохраненный StorageFolder:

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

С помощью FolderPicker вы можете получить объект StorageFolder. Но сохранение этого объекта в FutureAccessList не позволяет получить доступ к папке с путем. Вы можете получить сохраненный объект папки только с помощью Token , который сохраняется в FutureAccessList.

Поскольку приложение UWP является приложением-песочницей, при обращении к базе данных я рекомендую вамсохраните файл базы данных в локальном каталоге приложения, например ApplicationData.LocalFolder. Прямой доступ к внешнему файлу невозможен без добавления специальных возможностей.

Официальный пример приложения, предоставленный Microsoft , можно найти здесь , который демонстрирует постоянный доступ к файлам / папкам.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...