如何读取共享Xamarin项目中的文件?
问题描述:
我使用MvvmCross我Xamarin的应用程序,所以我有3个项目:MyProject.Core
,MyProject.Droid
和MyProject.Touch
如何读取共享Xamarin项目中的文件?
我在MyProject.Core
项目file.txt
。我希望能够从MyProject.Core
的代码中打开并阅读file.txt
,以便它可以在两个平台上使用。这听起来很简单,但我不知道如何。我发现了两种方法,但我认为它们不适合我:
1)我使file.txt
成为嵌入式资源,并在运行时通过反射来读取它。但我认为我不能在PCL中做到这一点。
2)我将file.txt
设置为“复制到输出目录”,但这不起作用,或者是因为生成的包(.ipa或.apk)一旦在手机上就无法访问它(对吗? )
编辑
我只是想,就足够我的情况的解决方案的:
- 添加
file.txt
到MyProject.Core
- 在iOS项目中,在
Resources
文件夹中添加与LINK相同的文件。 - 在Android项目中,在
values
文件夹中添加与LINK相同的文件。
虽然我仍然无法从MyProject.Core
访问file.txt
,我可以从每一个平台,这是一个足以解决我的情况下访问同一个文件。我会在这里留下问题,以防任何人对需要它的其他人有这个特定场景的答案。
答
如果您的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");
https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/files/#Loading_and_Saving_Files – SushiHangover
这部分解释了如何从用户读取/写入文件。我在问如何阅读我(开发人员)将自己置于共享项目中的文件。但我认为没有办法,我的替代解决方案是唯一的方法...... – Darius
如果您正在讨论最终用户或您的代码,阅读文件,正在阅读文件,无所谓 – SushiHangover