2017-10-20 14 views
0

J'utilise MvvmCross pour mon application Xamarin, j'ai donc 3 projets: MyProject.Core, MyProject.Droid et MyProject.TouchComment lire un fichier dans un projet Xamarin partagé?

J'ai file.txt dans le projet MyProject.Core. Je veux être en mesure d'ouvrir et de lire file.txt de mon code dans MyProject.Core afin qu'il puisse être utilisé sur les deux plates-formes. Cela semble simple mais je n'arrive pas à comprendre comment. J'ai trouvé 2 approches mais je ne pense pas qu'elles puissent fonctionner pour moi:

1) Je fais file.txt une ressource incorporée et la lit à l'exécution par l'intermédiaire de la réflexion. Mais je ne pense pas que je peux le faire dans un PCL. 2) Je mets file.txt à "Copier dans le répertoire de sortie", mais cela ne fonctionnera pas non plus parce que le paquet résultant (.ipa ou .apk) n'y aura pas accès une fois qu'il sera sur le téléphone (non?)

EDIT

Je viens de penser à une solution qui suffira à ma situation:

  1. Ajouter file.txt-MyProject.Core
  2. Dans le projet iOS, ajoutez le même fichier en tant que LINK dans le dossier Resources. Dans le projet Android, ajoutez le même fichier qu'un lien dans le dossier values.

Bien que je ne peux toujours pas accéder à file.txt de MyProject.Core, je peux accéder au même fichier à partir de chaque plate-forme, qui est une solution suffisante à ma situation. Je vais laisser la question ici au cas où quelqu'un aurait une réponse à ce scénario spécifique pour quelqu'un d'autre qui en a besoin.

+0

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

+0

Ce section explique comment lire/écrire des fichiers de l'utilisateur. Je demande comment lire un fichier que j'ai (le développeur) m'a placé dans le projet partagé. Mais je pense qu'il n'y a aucun moyen et que ma solution de rechange est la seule façon ... – Darius

+0

Peu importe si vous parlez d'un utilisateur final ou de votre code, en lisant un fichier, il lit un fichier – SushiHangover

Répondre

2

Si le type de votre projet Core est un projet NET Standard, vous pouvez simplement utiliser les classes System.IO standard pour obtenir le système de fichiers.

S'il s'agit d'un PCL (vous souhaitez probablement le mettre à niveau), vous pouvez utiliser le plugin MvvmCross File pour accéder au système de fichiers ou à la nuget PCLStorage. Celui que tu préfères. En utilisant le premier, vous ajouteriez la nuget MvvmCross.Plugins.File au core, et les deux projets d'application. Ensuite, vous pouvez ajouter IMvxFileStore dans le ctor du ViewModel ou du Service que vous voulez injecter. Commencez ensuite à utiliser l'une des méthodes de cette interface pour fonctionner sur le système de fichiers.

Cependant, pour les ressources intégrées dans votre PCL vous pourriez faire quelque chose comme:

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