uwp如何读取指定目录下的文件

时间:2018-05-31 06:11:36

标签: c# file uwp

(c#UWP)如何在不使用文件选择器的情况下读取任何目录中的文件? 这是我的代码:

var t = Task.Run(() => File.ReadAllText(@"D:\chai.log"));

t.Wait();

抛出异常:

Access to the path 'D:\chai.log' is denied.

谢谢!

2 个答案:

答案 0 :(得分:1)

Windows 10 Build 17093引入了broadFileSystemAccess功能,允许应用访问当前用户有权访问的文件夹。

  

这是一项受限制的功能。首次使用时,系统会提示   用户允许访问。可以在“设置”中配置访问权限。隐私

     
    

文件系统。如果您向声明此功能的商店提交应用程序,则需要提供有关原因的其他说明     您的应用需要此功能,以及它打算如何使用它。这个     功能适用于Windows.Storage命名空间中的API

  

MSDN文档

broadFileSystemAccess

Windows.Storage

答案 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