首页 > 解决方案 > 如何使用 UWP Backbround Task 从本地存储(比如 "C:\\" )读取文件?

问题描述

有没有办法从本地驱动器读取文件(比如C:\\eUWP\\UnReleasedFeatureTest.txt)我有一个后台任务,它必须从文件中读取一些数据,路径是C:\\eUWP.

下面是我的示例代码片段。

[DataContract]
public sealed class ConfigFileDetail
{
    [DataMember]
    public string TestingUnreleasedFeatures { get; set; }                
}
public void Run(IBackgroundTaskInstance taskInstance)
{
    string filepath = "C:\\eUWP\\UnReleasedFeatureTest.txt";
    string result = string.Empty;
    try
    {
        if (File.Exists(filepath)) { 
            using (StreamReader r = new StreamReader(new FileStream(filepath, FileMode.Open)))
            {
                var jsonData = r.ReadToEnd();
                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ConfigFileDetail));
                MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonData));
                stream.Position = 0;
                ConfigFileDetail dataContractDetail = (ConfigFileDetail)jsonSerializer.ReadObject(stream);
                ShowToast("Hi Praveer, I'm Electron's UWP sidekick" + dataContractDetail.TestingUnreleasedFeatures);
                UpdateTile("Hi Praveer see result, I'm Electron's UWP sidekick");
            }
        }
    }
    catch(Exception e)
    {
        Console.WriteLine("The error message is " + e.ToString());
    }
}

我也尝试过使用StorageFile,但不幸的是,它没有用

Windows.Storage.StorageFolder storageFolder = 
   Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile sampleFile = 
   await storageFolder.GetFileAsync("E:\\eUWP\\UnReleasedFeatureTest.txt");

有什么方法可以从后台任务从本地驱动器访问文件?

标签: uwpelectron

解决方案


首先,您永远无法使用System.IOAPI 访问硬盘驱动器上任意路径上的文件 - 由于安全原因,该 API 被阻止,因此 UWP 应用程序在孤岛中运行并且无法破坏主机 PC 上的任何内容。

但是,您可以通过 API 使其工作StorageFile,但您首先需要broadFileSystemAccessPackage.appxmanifest文件中声明。在文本编辑器中打开它并更新根元素,如下所示:

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">

<Capabilities>您现在可以在元素中声明:

<rescap:Capability Name="broadFileSystemAccess" />

StorageFile现在,只要用户没有在设置中禁用文件系统访问,您的第二个建议解决方案就应该能够访问该文件。

有关更多详细信息,请查看 Docs


推荐阅读