【问题标题】:How to access a file in .NET Standard 2.0 DLL?如何访问 .NET Standard 2.0 DLL 中的文件?
【发布时间】:2018-02-15 19:29:31
【问题描述】:

感谢您的光临。

这是我面临的问题,希望能得到一些帮助。

我正在尝试访问 .NET 标准 DLL 中的文件。如果我在测试 UWP 应用程序中使用 Windows.Storage 命名空间,一切正常,如下所示:

Windows.Storage.StorageFile f = await StorageApplicationPermissions.FutureAccessList.GetFileAsync("TestPickedFileToken1");
        txt.Text = await Windows.Storage.FileIO.ReadTextAsync(f);

真正的应用是访问 .NETStandard 2.0 DLL 的 MVVM UWP 应用(针对 Fall Creators Update)。问题是我找不到包含要添加到我的 DLL 中的 Windows.Storage 命名空间的程序集。它在 UWP 中可用,当我尝试在 System.IO 中使用以下内容时,它使我可以访问 DLL 中的路径被拒绝错误:

string s = File.ReadAllText(filename);

我需要从 DLL 读取/写入文件。如果我在 UWP 应用程序的 ViewModel 中读/写它会起作用,但我不想这样做。是否可以在我的 DLL 中添加对 Windows.Storage 的引用,或者是否可以替代访问 DLL 中的文件?

提前感谢您的帮助!

【问题讨论】:

  • @HansPassant 我不知道 UWP 但StorageFile API 在我看来好像无法正常访问文件,我们必须使用其他方式与(可能是沙盒)文件进行交互系统。如果这是一个 UWP 独有的 API,那么这意味着你不能在 netstandard 库中使用它。
  • @Hans Passant,感谢您的回复。最新的 UWP 应用不允许在不使用 Windows.Storage 命名空间并首先授予该位置权限的情况下访问文件系统的所有位置。早些时候,我使用了一个 .NET Standard 1.4 DLL 和一个针对 15063 的 UWP 应用程序,并且没有收到 System.IO.File.ReadAllText 错误,但感谢您的尝试。
  • 这些存储 API 是否可以与流一起使用,那么是否可以仅与您的 netstandard 库中的流一起使用?

标签: c# uwp .net-standard-2.0


【解决方案1】:

更新

本帖中的信息已过时。请参考for example here

原答案

很遗憾,如果没有 StorageFile API,您将无法访问任何文件路径。当用户使用FilePicker 授予您对文件的访问权限并且您以StorageFile 的形式获得引用时,您仍然无法使用System.IO 类直接访问同一路径。

同时,您不能在 .NET Standard 库中使用 StorageFile API。但是,您可以做的是从 StorageFile 获取 System.IO.Stream,然后您可以在 .NET Standard 库中使用它:

var readStream = await file.OpenStreamForReadAsync();
var writeStream = await file.OpenStreamForWriteAsync();

要访问此扩展方法,请确保将using System.IO; 添加到源代码文件的顶部。

【讨论】:

  • 伙计,为什么我遇到的任何与 UWP 相关的答案都以“不幸的是,你不能在 UWP 中这样做”开头?我已经厌倦了用这项技术在每一步都碰壁。
  • 其实这已经改变了!看看这个答案 - stackoverflow.com/a/49854399/732221
  • 其实一点都没有改变,.NET 标准库不允许使用 System.IO,无论是 broadFileSystemAccess、userDataSystem 还是 runFullTrust。
  • @Aberro 实际上最初的答案是在 broadFileSystemAccess 存在之前写的,所以我后来更新了它,因为情况确实发生了变化 - broadFileSystemAccess 允许我们使用带有 @ 的路径访问磁盘上的任何文件987654334@ API
猜你喜欢
  • 1970-01-01
  • 2018-02-08
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 2018-01-27
相关资源
最近更新 更多