uwp - 如何使用 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");
有什么方法可以从后台任务从本地驱动器访问文件?
解决方案
首先,您永远无法使用System.IO
API 访问硬盘驱动器上任意路径上的文件 - 由于安全原因,该 API 被阻止,因此 UWP 应用程序在孤岛中运行并且无法破坏主机 PC 上的任何内容。
但是,您可以通过 API 使其工作StorageFile
,但您首先需要broadFileSystemAccess
在Package.appxmanifest
文件中声明。在文本编辑器中打开它并更新根元素,如下所示:
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
<Capabilities>
您现在可以在元素中声明:
<rescap:Capability Name="broadFileSystemAccess" />
StorageFile
现在,只要用户没有在设置中禁用文件系统访问,您的第二个建议解决方案就应该能够访问该文件。
有关更多详细信息,请查看 Docs。
推荐阅读
- swift - 如何在 ARKit 中使用垂直检测?
- perl - Perl - 使用 Image::Magick
- java - SpringBoot @WebMvcTest 和 @MockBean 没有按预期工作
- sql - LIKE 中的 SQL 下划线
- javascript - 将数组中的项目作为新值动态添加到对象的最佳方法
- c# - 从 SVG (XML) 根元素中获取属性值
- silverstripe-4 - 从页面中删除默认 HtmlEditorField
- python-2.7 - 将 NUL 字符写入 csv
- html - 标题对表格没有响应?
- excel - Excel:在一个范围内带有 ISBLANK 的 IF 语句