2009-12-02 12 views
32

¿Cómo crearía y escribiría en un archivo en una aplicación Monotouch para iPhone?Escribir en un archivo en Monotouch

El archivo debe permanecer entre el inicio de la aplicación, así que supongo que debe colocarse en algún lugar del paquete de la aplicación (¿documentos o recursos?).

Respuesta

100

[Nota: Mi respuesta es bastante exhaustiva, ya no lo hago conozca su nivel de comprensión con respecto a los paquetes de aplicaciones o la estructura del pequeño mundo aislado de su aplicación de iPhone; disculpe si cubro cosas que ya sabe; prefiero escribir demasiado que muy poco, y agregar un poco del por qué al discutir el cómo ...]

Tiene algunas opciones (por supuesto). Supongo que ya está familiarizado con .Net hasta cierto punto y que su pregunta es más acerca de cómo hacerlo en iPhone Way.

Cada aplicación de iPhone (y verá lo mismo para las aplicaciones en OS X) es un "paquete" que no es un ejecutable en el sentido tradicional, sino una jerarquía de carpetas dentro de la cual vive la aplicación binaria (junto con recursos, configuraciones, etc.).

Por la forma en que son las aplicaciones de sandboxed de iPhone, no tiene acceso a las carpetas compartidas que normalmente podría usar al hacer el desarrollo de escritorio (teniendo, por ejemplo, una carpeta de Documentos común que vive bajo carpeta de inicio del usuario a la que tienen acceso las aplicaciones).

En su lugar, su aplicación tiene su propia jerarquía de carpetas que es como su propio conjunto personal de las carpetas que normalmente se compartirían en todas las aplicaciones.

La manera más fácil de ver cómo se ve la estructura de carpetas de su aplicación en el teléfono es mirar la carpeta que el simulador de iPhone usa para las instalaciones de aplicaciones, configuración, bla, bla, bla. En mi máquina (no recuerdo si esto es configurable, pero es probablemente el mismo en su sistema), se puede llegar a la carpeta por este camino:

~/Library/Application Support/iPhone Simulator

Dentro de eso, hay un usuario/Carpeta de aplicaciones que contiene las aplicaciones que instaló en el simulador. Desplácese hacia cualquiera de esas carpetas y podrá ver la estructura de carpetas a la que tendrá acceso su aplicación en el teléfono.

Para almacenar los archivos que desea que persistan en las sesiones de la aplicación, la carpeta Documentos de la aplicación es el lugar. No es su única opción para crear archivos, pero es la opción derecha para este trabajo. Además de que sus archivos se almacenen correctamente, mantenerlos en la carpeta Documentos también hará que iTunes los haga una copia de seguridad cuando el usuario se sincronice.

Con MonoTouch, se puede obtener la ruta de la carpeta Documentos de su aplicación con Environment.GetFolderPath(Environment.SpecialFolder.Personal);

Si desea probarlo, esto es un código muy simple que va a escribir un archivo llamado "out.txt" a la carpeta Documentos de su aplicación. Este código también lee el contenido del archivo para mostrar que fue creado. Para una mayor verificación, vaya a la carpeta de Aplicaciones del simulador, ordene las carpetas de la aplicación por la fecha en que fueron modificadas, desglosar las más recientemente modificadas y observe dentro de sus Documentos carpeta - encontrará "out.txt" (no puede encontrar la carpeta de su aplicación por nombre porque, cuando se instala su aplicación, se rellena dentro de una carpeta con un nombre como "2B3CA854-FADB-4DDC-9732-0E61B3DD8D8C "- clasificar las carpetas por la fecha en que se modificaron te orientará a la aplicación más recientemente modificada, que, en este caso, es lo aplicación contiene el siguiente código):

// 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); 

por lo tanto, la única cosa aquí que es Realmente, lo específico de iPhone es saber que "Environment.SpecialFolder.Personal" se asigna a la carpeta Documents de su aplicación. Más allá de eso, es .Net como de costumbre.

Y, de nuevo, esto era algo excesivo, pero quería responder suficientemente a fondo para todos que la ve - espero que esto ayude :)

+2

Rory Rory Rory! Gran explicación Eso fue absolutamente perfecto! ¡Muchas gracias! – Bryan

+0

Me complace ayudar :) –

+0

GRACIAS, he estado luchando con esto ya que el simulador funciona con diferentes permisos de escritura, parece. –

8

Puede hacer algo como esto en tiempo de ejecución:

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

y que va a crear el archivo. Para abrirlo para leer, use el mismo Path.Combine() pero con StreamReader.

+0

Gracias Gonzalo! No puedo esperar a probarlo. – Bryan