2017-10-20 135 views
0

我使用MvvmCross我Xamarin的應用程序,所以我有3個項目:MyProject.CoreMyProject.DroidMyProject.Touch如何讀取共享Xamarin項目中的文件?

我在MyProject.Core項目file.txt。我希望能夠從MyProject.Core的代碼中打開並閱讀file.txt,以便它可以在兩個平臺上使用。這聽起來很簡單,但我不知道如何。我發現了兩種方法,但我認爲它們不適合我:

1)我使file.txt成爲嵌入式資源,並在運行時通過反射來讀取它。但我認爲我不能在PCL中做到這一點。

2)我將file.txt設置爲「複製到輸出目錄」,但這不起作用,或者是因爲生成的包(.ipa或.apk)一旦在手機上就無法訪問它(對嗎? )

編輯

我只是想,就足夠我的情況的解決方案的:

  1. 添加file.txtMyProject.Core
  2. 在iOS項目中,在Resources文件夾中添加與LINK相同的文件。
  3. 在Android項目中,在values文件夾中添加與LINK相同的文件。

雖然我仍然無法從MyProject.Core訪問file.txt,我可以從每一個平臺,這是一個足以解決我的情況下訪問同一個文件。我會在這裏留下問題,以防任何人對需要它的其他人有這個特定場景的答案。

+0

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/files/#Loading_and_Saving_Files – SushiHangover

+0

這部分解釋瞭如何從用戶讀取/寫入文件。我在問如何閱讀我(開發人員)將自己置於共享項目中的文件。但我認爲沒有辦法,我的替代解決方案是唯一的方法...... – Darius

+0

如果您正在討論最終用戶或您的代碼,閱讀文件,正在閱讀文件,無所謂 – SushiHangover

回答

2

如果您的Core項目的類型是NET標準項目,則可以使用標準System.IO類來獲取文件系統。

如果它是PCL(您可能想升級它),則可以使用MvvmCross File插件來訪問文件系統或PCLStorage nuget。無論你喜歡什麼。

使用前者,您可以將MvvmCross.Plugins.File nuget添加到核心和兩個應用程序項目中。然後,您可以在要注入的ViewModel或Service的ctor中添加IMvxFileStore。然後開始使用該接口上的任何方法來操作文件系統。

然而,在您的PCL嵌入的資源,你可以這樣做:

var assembly = typeof(SomeTypeInYourPCL).Assembly; 
// some older PCL profiles you need to call .GetTypeInfo() before .Assembly 
var stream = assembly.GetManifestResourceStream("whatever.txt");