我有使用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
答案 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。
即使直接直接参考特定的设置页面,您也需要要求用户在“设置”应用中将设置显式设置为“开”。