【问题标题】:How to convert UWP StorageFile to .NET FileInfo?如何将 UWP StorageFile 转换为 .NET FileInfo?
【发布时间】:2018-04-11 13:33:52
【问题描述】:

现在 UWP 支持 .NET Standard 2.0,它可以访问更多 System.IO 命名空间,包括 FileinfoDirectoryInfo

如何将 UWP StorageFile 转换为 Fileinfo?还有一个 StorageFolder 到 DirectoryInfo 吗?

尝试打开生成的 Fileinfo 时,天真的方法(获取 StorageItem 的完整路径并使用它构造 Fileinfo)失败,如果可能的话,我真的很想避免使用 PCLStorage

【问题讨论】:

  • 您的幼稚实现在 Windows 10 桌面上的 uwp 中运行良好,我可以访问生成的文件信息,例如显示带有 Directory.FullName 的消息。也许它依赖于Provider,在Windows 10下名称是“This PC”(LOL)
  • 在您尝试打开该 FileInfo 以获取流之前,它可以正常工作。

标签: .net uwp .net-standard


【解决方案1】:

System.IO.File 和 System.IO.FileInfo 早已可用于 UWP 应用。它们不是 .Net Standard 2.0 的新功能

StorageFile 和 FileInfo 不做同样的事情,通常不能互换。你没有说你得到了什么错误,但我猜它是 AccessDenied 因为你的应用程序无法直接访问你尝试使用的路径。

默认情况下,应用只能直接访问其 ApplicationData 和 InstalledLocations。他们可以使用 System.IO 直接访问这些位置。要访问已被用户授予访问权限的其他位置(直接通过文件选择器,隐式通过包功能等),应用程序需要通过 StorageFile 和 StorageFolder 类通过文件代理。

您可以从IStorageHandleAccess 获取代理的 Win32 文件 HANDLE 并从中初始化 System.IO.File,但 FileInfo 不提供从 HANDLE 构造的方法。

【讨论】:

  • 我通过文件选择器获取有问题的 StorageFile,我知道 UWP 沙盒的限制。问题是从这些 FileInfo 中获取流:虽然我可以打开 StorageFile,但我很好,但使用其路径构造 FileInfo 并尝试打开它会导致异常(访问被拒绝)。
  • FileInfo 未获得代理访问。您只能将其用于应用程序可以直接写入的位置。对于其他人,您需要从 StorageFile 流式传输或使用 IStorageHandleAccess 来初始化 System.IO.File。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2018-09-30
  • 2013-05-06
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多