11

我正在使用可移植类库编写一个ConfigManager类。 PCL支持我想要使用的StreamReaderStreamWriter类,但这些类的PCL版本不支持在构造过程中传入字符串。 PCL也不支持reader.Close()writer.Close()。最后,它不支持FileStream类。StreamReader和可移植类库

所以我要寻找的答案,下列问题之一:

  1. 我怎样才能获得StreamReaderStreamWriter类的PCL工作 ?
  2. 如何使用PCL创建新的stream
  3. 我还需要在PCL中加载和保存文件还有哪些其他的替代品?
+0

它支持配置流对象?因为这应该关闭它就好了。 –

+2

相反.Close()的使用.Dispose(), 没有没有解决, 因为那里是不是有问题?文件系统访问必须抽象化 只需对接口进行编码即可。 检查: [链接] hthttps://pclstorage.codeplex.com [链接](https://github.com/slodge/MvvmCross/tree/v3/Plugins/Cirrious/File) – Dan

回答

8

使用Dispose()而不是Close()(或只是包装在using语句一切)。我们在Windows应用商店应用和较新的PCL中隐藏/删除了Close(),因为它会执行相同的操作,所以人们会对要调用哪一个PCL感到困惑。

考虑使用PCL Storage实现跨平台的文件系统访问。

以下是你可能要参阅如何处理在PCLS特定平台功能的一些博客文章:

+0

PCLStorage是异步其常常不方便。特别是在所有平台上都存在System.IO的.NET/Xamarin/WP8上使用异步PCLStorage会很难过。 – Grigory

+0

阅读此答案的人将使用PCL存储。 PCL存储不再被维护,我建议不要在生产应用程序中使用它。 更喜欢使用依赖注入来实现您自己的存储解决方案 – Tifa

2

找到答案在这里(由罗布·卡普兰):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()方法。