2

我想用 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);

        }
4

1 回答 1

3

您无需调用StorageFile.GetFileFromPathAsync(file.Path),因为您已经在filePickSingleFileAsync 返回的变量中拥有此 StorageFile:

    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 进行更直接的访问(请参阅 Build 2017 talk UWP Apps 文件访问改进

于 2018-03-20T02:31:40.987 回答