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()方法。