Windows FolderPicker更新到Windows 10.0.18362后停止工作

时间:2019-09-09 21:20:25

标签: c# windows uwp

我有使用Windows FolderPicker的代码。更新到Windows版本10.0.18362后,我对FoldePicker的使用已停止工作。

我附上了一些我用来使对文件的访问被拒绝的代码。

using System;
using System.IO;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Storage.Pickers;
using Windows.Storage;
using Windows.Storage.AccessCache;

namespace FolderPickerTest
{
    public sealed partial class MainPage : Page
    {
        private static string path = @"filepath";
        string[] lines;

        public MainPage()
        {
            this.InitializeComponent();

            test();
        }

        public async void test()
        {
            var folderPicker = new FolderPicker();  
            folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;   
            folderPicker.FileTypeFilter.Add("*"); 

            StorageFolder folder = await folderPicker.PickSingleFolderAsync();  
            if (folder != null)
            {
                StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); 
            }
        }

        private void open_click(object sender, RoutedEventArgs e)
        {
            lines = new string[2];

            try
            {
                lines = File.ReadAllLines(path);
            }
            catch(Exception ex)
            {
                errorText.Text = ($"Error: {ex.Message.ToString()}");
            }
        }
    }
}

我当前收到的错误消息是: Access to the path 'filepath' is denied

2 个答案:

答案 0 :(得分:2)

这里的问题是您试图使用System.IO API读取任意路径。在其中一个发行版中,当您声明broadFileSystemAccess功能时,此功能实际上已起作用,但现在不再如此。现在,您必须使用StorageFile API来实现您的目标。

如果选择带有FolderPicker的文件夹,则会返回一个StorageFolder实例。您可以在此实例上调用GetFileAsync方法以按名称获取文件。这是StorageFile的实例,您可以使用FileIO.ReadLinesAsync method阅读。

答案 1 :(得分:1)

为更好地解释Martin Zikmund的答案,在Win 10 1803(2018年4月)中,用户设置中的broadFileSystemAccess功能自动设置为ON。

从Win 10 1809(2018年10月)开始,此系统设置默认设置为OFF。

即使直接直接参考特定的设置页面,您也需要要求用户在“设置”应用中将设置显式设置为“开”。