2013-03-20 135 views
9

因此,我正在編寫一個面向.NET 4.5,Windows 8和Windows Phone 8的可移植類庫。我試圖從作爲構建內容的項目一部分的文本文件讀取。我發現StreamReader在PCL中可用,但我似乎無法知道如何從文件中獲取流,只要有文件路徑即可。如果任何人都可以將我指向正確的結構,我會很感激。另外,如果你也可以指導XML文件。我現在只是在閱讀文本文件,但我將在稍後使用XML。謝謝!C#PCL從文件讀取

+0

您可以給StreamReader一個Stream嗎?那麼問題就是「打開一個文件」,哪一個應該沒問題,不是嗎?對於大多數XML API,這同樣工作正常 – 2013-03-20 16:05:46

+0

我有一個字符串,它是一個文件路徑,但StreamReader需要一個流(顯然)。我在問,如何在PCL中將路徑變成流。 – 2013-03-20 16:07:22

+0

如果可以將文件上的構建操作更改爲Embedded Resource,則可以使用第一個答案中給出的方法[此處](http://stackoverflow.com/questions/10963781/how-to-read-a-資源文件中之便攜式類庫)。 – 2013-03-20 16:16:05

回答

9

可移植類庫允許您使用目標平臺中存在的名稱空間和類。
.Net 4.5(假設您的意思是完整的桌面-WinForms/WPF),Windows 8和Windows Phone 8都會以不同的方式訪問文件,併爲他們提供不同的文件。從哪裏訪問文件也有很大不同:嵌入式內容;嵌入資源;隔離存儲;共享文件夾;完整的文件系統。這些並不都適用於您提到的所有平臺。

簡答題。你可能不能做你以後的事情。

跨平臺的文件系統訪問方式差異很大,通常必須針對每個平臺以不同的方式完成。
您可以做的是爲PCL可以使用的文件訪問(打開,讀取,保存等)定義一個接口,然後根據需要創建傳遞給PCL的特定於平臺的實例。

+1

謝謝,我希望在像.NET這樣的高層次構造中,這不會是一個問題。但我完全明白限制來自哪裏。哦,接口!再次感謝。 – 2013-03-21 14:08:56

9

馬特是正確的。

但是,有插件允許您從PCL訪問文件。

我的圖書館,MvvmCross提供一個 - https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/File

但是......什麼目前你正在做,我認爲最好的辦法是@ dsplaisted的便攜式文件存儲庫 - 這是可以通過的NuGet - http://nuget.org/packages/pclstorage - 這是寫由來自微軟的PCL團隊之一 - 並且它非常適合將路徑轉換爲PCL中的Streams

+0

MvvmCross真棒!它使跨平臺更容易! – Telavian 2014-01-25 18:16:48