【问题标题】:C# PCL Reading from FileC# PCL 从文件中读取
【发布时间】:2013-03-20 16:04:36
【问题描述】:

所以我正在编写一个面向 .NET 4.5、Windows 8 和 Windows Phone 8 的可移植类库。我正在尝试从作为构建内容的项目的一部分的文本文件中读取。我看到 StreamReader 在 PCL 中可用,但在给定文件路径的情况下,我似乎无法找出如何从文件中获取流。如果有人能指出我正确的结构,我将不胜感激。此外,如果您也可以为 XML 文件提供指导。我现在只阅读文本文件,但稍后我将使用 XML。谢谢!

【问题讨论】:

  • 你能给 StreamReader 一个 Stream 吗?那么问题只是“打开一个文件”,这两者都应该没问题,不是吗?对于大多数 XML API 来说,这同样适用
  • 我有一个字符串是文件路径,但 StreamReader 接受一个流(显然)。我问的是如何在 PCL 中将路径变成流。
  • 如果可以将文件上的构建操作更改为嵌入式资源,则可以使用第一个答案here中给出的方法。
  • 我必须将其保留为内容,因为它可以在项目构建后添加。

标签: c# file-io windows-8 windows-phone-8 portable-class-library


【解决方案1】:

可移植类库允许您使用存在于您所针对的所有平台中的命名空间和类。
.Net 4.5(假设您的意思是完整的桌面-WinForms/WPF)、Windows 8 和 Windows Phone 8 的文件访问方式都非常不同,并且可以使用不同的文件。可以从哪里访问文件也有很大不同:嵌入的内容;嵌入式资源;隔离存储;共享文件夹;完整的文件系统。这些并非在您提到的所有平台上都可用。

简短的回答。你可能无法做你所追求的。

文件系统访问因平台而异,通常必须针对每个平台进行不同的访问。
您可以做的是为您的 PCL 可以使用的文件访问(打开、读取、保存等)定义一个接口,然后创建您根据需要传递给 PCL 的平台特定实例。

【讨论】:

  • 谢谢,我希望在 .NET 这样的高级结构中这不会成为问题。但我完全理解限制来自哪里。哦,好吧,关于接口!再次感谢。
【解决方案2】:

马特是正确的。

但是,有一些插件可以让您从 PCL 访问文件。

我的库,MvvmCross 提供了一个 - https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/File

但是...对于您目前正在做的事情,我认为您最好的选择是 @dsplaisted 的便携式文件存储库 - 可通过 Nuget 获得 - http://nuget.org/packages/pclstorage - 这是由 Microsoft 的 PCL 团队之一编写的 - 它是非常适合将路径转换为 ​​PCL 中的流

【讨论】:

  • MvvmCross 太棒了!它使跨平台变得更加容易!
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 2012-05-15
  • 2016-06-18
  • 2016-08-02
  • 2020-11-28
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多