(c#UWP)如何在不使用文件选择器的情况下读取任何目录中的文件? 这是我的代码:
var t = Task.Run(() => File.ReadAllText(@"D:\chai.log"));
t.Wait();
抛出异常:
Access to the path 'D:\chai.log' is denied.
谢谢!
答案 0 :(得分:1)
Windows 10 Build 17093引入了broadFileSystemAccess
功能,允许应用访问当前用户有权访问的文件夹。
这是一项受限制的功能。首次使用时,系统会提示 用户允许访问。可以在“设置”中配置访问权限。隐私
文件系统。如果您向声明此功能的商店提交应用程序,则需要提供有关原因的其他说明 您的应用需要此功能,以及它打算如何使用它。这个 功能适用于Windows.Storage命名空间中的API
MSDN文档
答案 1 :(得分:0)
拒绝访问用户的文件和文件夹。在UWP应用程序中,只能访问用户挑选的文件或文件夹进行读取或写入。
要显示用户选择文件或文件夹的对话框,请在下面编写以下代码:
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.FileTypeFilter.Add(".log");
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
// Application now has read/write access to the picked file
}
有关FileOpenPicker
的详细信息,请阅读Open files and folders with a picker - UWP app developer | Microsoft Docs。
如果您希望将来访问用户选择的文件或文件夹,请使用MostRecentlyUsedList
来跟踪这些文件和文件夹。
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
var mru = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList;
string mruToken = mru.Add(file, "Some log file");
您可以稍后枚举mru
以访问文件或文件夹:
foreach (Windows.Storage.AccessCache.AccessListEntry entry in mru.Entries)
{
string mruToken = entry.Token;
string mruMetadata = entry.Metadata;
Windows.Storage.IStorageItem item = await mru.GetItemAsync(mruToken);
// The type of item will tell you whether it's a file or a folder.
}
有关MostRecentlyUsedList
的详细信息,请阅读Track recently used files and folders - UWP app developer | Microsoft Docs。