StreamReader 和可移植类库
Posted
技术标签:
【中文标题】StreamReader 和可移植类库【英文标题】:StreamReader and Portable Class Library 【发布时间】:2013-08-09 05:44:20 【问题描述】:我正在使用可移植类库编写一个 ConfigManager 类。 PCL 支持我想使用的StreamReader
和StreamWriter
类,但是这些类的PCL 版本不支持在构造过程中传入字符串。 PCL 也不支持reader.Close()
和writer.Close()
。最后它不支持FileStream
类。
所以我正在寻找以下任一问题的答案:
-
如何让
StreamReader
和StreamWriter
类正常工作
在 PCL 中?
如何使用 PCL 创建新的stream
?
在 PCL 中加载和保存文件还有哪些其他选择?
【问题讨论】:
是否支持释放流对象?因为那应该关闭它就好了。 而不是.Close() 使用.Dispose(),没有没有解决方案,因为没有问题...文件系统访问必须抽象 只是针对接口的代码。检查:[链接]hthttps://pclstorage.codeplex.comlink 【参考方案1】:在这里找到了答案(Rob Caplan):http://social.msdn.microsoft.com/Forums/windowsapps/en-US/386eb3b2-e98e-4bbc-985f-fc143db6ee36/read-local-file-in-portable-library#386eb3b2-e98e-4bbc-985f-fc143db6ee36
文件访问不能在 Windows 应用商店应用程序和 Windows Phone 8 应用程序。您将不得不使用特定于平台的代码, 打开文件并获取流。然后,您可以将流传递到 PCL。
由于 Windows 应用商店应用和 Windows Phone 8 应用都使用 基本上相同的 Windows(电话)运行时类 Windows.Storage 打开文件可以共享代码(但不是 二进制)通过在两个项目之间链接代码文件。查看分享 添加为链接的代码。
有关更多信息,请参阅最大化 Windows Phone 8 和 Windows 8 之间的代码重用 共享代码的技术。
如果有人有除此之外的解决方案,我很想听听;还想知道 PCL 中的 .Close()
方法。
【讨论】:
【参考方案2】:使用Dispose()
而不是Close()
(或者只是将所有内容包装在 using 语句中)。我们已经在 Windows 应用商店应用和更新的 PCL 中隐藏/删除了Close()
,因为它做同样的事情,人们会不知道该调用哪个。
考虑使用PCL Storage 进行跨平台文件系统访问。
以下是您可能想要参考的一些博客文章,了解如何在 PCL 中处理特定于平台的功能:
How to Make Portable Class Libraries Work for You Portable Class Library Enlightenment / Adaptation Using Target-Specific Code in a Portable Library【讨论】:
PCLStorage 是异步的,这通常很不方便。特别是在 System.IO 存在于所有平台上的 .NET/Xamarin/WP8 上使用异步 PCLStorage 是很可悲的。 致任何阅读此答案并使用 PCL 存储的人。 PCL 存储不再维护,我建议不要在生产应用程序中使用它。更喜欢使用依赖注入实现自己的存储解决方案以上是关于StreamReader 和可移植类库的主要内容,如果未能解决你的问题,请参考以下文章