2009-12-02 6 views
32

Comment créer et écrire un fichier dans une application iPhone Monotouch?Écrire dans un fichier sous Monotouch

Le fichier doit persister entre les lancements d'applications, donc je suppose qu'il doit être placé quelque part dans le paquet App (documents ou ressources?).

Répondre

100

[Note: Ma réponse est assez complète parce que je ne connaître votre niveau de compréhension concernant les bundles d'application ou la structure du petit monde en bac à sable de votre application iPhone - des excuses si je couvre des choses que vous connaissez déjà - je préfère écrire un peu trop peu, et ajouter un peu de en discutant le comment ...]

Vous avez quelques options (bien sûr). Je suppose que vous êtes déjà familier avec. Net dans une certaine mesure et que votre question est plus sur la façon de le faire sur iPhone. Chaque application iPhone (et vous verrez la même chose pour les applications sur OS X) est un "bundle" qui n'est pas un exécutable au sens traditionnel, mais en fait une hiérarchie de dossiers à l'intérieur de laquelle vit votre application binaire (avec les ressources, les paramètres, etc.) En raison de la qualité des applications iPhone en bac à sable, vous n'avez pas accès aux dossiers partagés que vous pouvez généralement utiliser lors du développement de bureau (par exemple, un dossier Documents commun qui se trouve sous un dossier de base de l'utilisateur auquel les applications ont accès). Au lieu de cela, votre application possède sa propre hiérarchie de dossiers, qui ressemble à son propre ensemble de dossiers partagés entre applications. La manière la plus simple de voir la structure des dossiers de votre application sur le téléphone est de regarder le dossier utilisé par le simulateur de l'iPhone pour les installations, les paramètres et bla bla bla. Sur ma machine (je ne me souviens pas si cela est configurable, mais il est probablement la même chose sur votre système), vous pouvez obtenir dans le dossier par ce chemin:

~/Library/Application Support/iPhone Simulator

A l'intérieur de cela, il y a un utilisateur/Dossier Applications contenant les applications que vous avez installées sur le simulateur. Parcourez l'un de ces dossiers et découvrez la structure de dossier à laquelle votre application aura accès sur le téléphone.

Pour stocker les fichiers que vous souhaitez conserver dans toutes les sessions d'applications, le dossier Documents de votre application est le bon endroit. Ce n'est pas votre seul choix pour créer des fichiers, mais c'est le juste choix pour ce travail. En plus de vos fichiers correctement stockés, les conserver dans le dossier Documents seront également sauvegardés par iTunes lorsque l'utilisateur se synchronisera.

Avec MonoTouch, vous pouvez obtenir votre chemin d'application de dossier Documents avec Environment.GetFolderPath(Environment.SpecialFolder.Personal);

Si vous souhaitez le tester, c'est un code très simple qui va écrire un fichier appelé « out.txt » à le dossier Documents de votre application. Ce code lit également le contenu du fichier pour montrer qu'il a été créé - pour plus de vérification, allez dans le dossier Applications du simulateur, triez les dossiers de l'application en fonction de la date à laquelle ils ont été modifiés, explorez les plus récents. dossier - vous trouverez "out.txt" (vous ne pouvez pas trouver le dossier de votre application par son nom car, lorsque votre application est installée, elle est bourrée dans un dossier avec un nom comme "2B3CA854-FADB-4DDC-9732-0E61B3DD8D8C "- le tri des dossiers par la date où ils ont été modifiés vous pointer vers le plus récemment modifié l'application, ce qui, dans ce cas, est ce que l'application contient le code suivant):

// For this to function, don't forget "using System.IO;" 

// If you're just playing around with this to see it work, place it inside 
// your AppDelegate's "FinishedLaunching" method in main.cs 

string path = Environment.GetFolderPath (Environment.SpecialFolder.Personal); 
string filePath = Path.Combine(path, "out.txt"); 

// File.WriteAllText will create a file and then write text to it. If the 
// file already exists, File.WriteAllText will overwrite it. 
File.WriteAllText(filePath, "Howdy, world."); 

// Now we prove it worked by reading the contents of the file and then 
// printing them to the console... 
string text = File.ReadAllText(filePath); 
Console.WriteLine(text); 

Alors, la seule chose ici qui est Le fait de savoir que "Environment.SpecialFolder.Personal" correspond au dossier Documents de votre application est vraiment spécifique à l'iPhone. Au-delà, c'est .Net comme d'habitude.

Et, encore une fois, ce fut sans doute exagéré, mais je voulais répondre suffisamment à fond pour tout le monde qui le voit - espérons que cette aide :)

+2

Rory Rory Rory! Bonne explication. C'était absolument parfait! Merci beaucoup! – Bryan

+0

heureux d'aider :) –

+0

MERCI, j'ai lutté avec cela que le simulateur fonctionne avec différentes autorisations d'écriture, il semble. –

8

Vous pouvez faire quelque chose comme ceci à l'exécution:

using (StreamWriter writer = new StreamWriter (Path.Combine (Environment.SpecialFolders.Documents, "yourfilename.ext"))) { } 

et qui permettra de créer le fichier. Pour l'ouvrir en lecture, utilisez le même Path.Combine() mais avec StreamReader.

+0

Merci Gonzalo! J'ai hâte de l'essayer. – Bryan