Отказ в доступе, когда я использую средство выбора открытых файлов для открытого текстового файла для RichEditBox UWP C#

Я хочу открыть текстовый файл с помощью Open File Picker и показать в RichEditBox, но когда я выбираю файл и нажимаю Ok, Visual Studio показывает "Отказано в доступе", я хочу знать, как решить эту проблему, пожалуйста, есть мой код:

var picker = new FileOpenPicker();
        picker.ViewMode = PickerViewMode.Thumbnail;
        picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
        picker.FileTypeFilter.Add("*");
        picker.FileTypeFilter.Add(".txt");
        picker.FileTypeFilter.Add(".text");
        picker.FileTypeFilter.Add(".bat");
        picker.FileTypeFilter.Add(".js");
        picker.FileTypeFilter.Add(".vbs");

        StorageFile file = await picker.PickSingleFileAsync();
        if (file != null)
        {
            StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
            StorageFile filepath = await StorageFile.GetFileFromPathAsync(file.Path);
            string text = await FileIO.ReadTextAsync(filepath);
            RichEditBox1.Document.SetText(Windows.UI.Text.TextSetOptions.None, text);

        }

1 ответ

Решение

Вам не нужно звонить StorageFile.GetFileFromPathAsync(file.Path) так как у вас уже есть этот StorageFile в file переменная, возвращаемая из PickSingleFileAsync:

    StorageFile file = await picker.PickSingleFileAsync();
    if (file != null)
    {
        string text = await FileIO.ReadTextAsync(file);
        RichEditBox1.Document.SetText(Windows.UI.Text.TextSetOptions.None, text);
    }

Ненужный GetFileFromPathAsync, вероятно, выдает ошибку AccessDenied, поскольку FileOpenPicker обеспечивает доступ только через возвращенный StorageFile и не дает прямого доступа к файлу по его пути. Это поведение зависит от версии, и новые версии Windows 10 обеспечат более прямой доступ через API файловой системы (см. Улучшения доступа к файлам в приложениях UWP приложения Build 2017)

Другие вопросы по тегам