Archivo de escritura con falla

Estoy tratando de tomar el contenido de un archivo y escribirlo en otro. Estoy leyendo bien, pero no puedo escribirlo en otro archivo.

Tengo una base de datos de palabras. Quiero separar las palabras en diferentes archivos según el número de letras. Todas las palabras de cuatro letras entran en un archivo, y así sucesivamente. Agregué un archivo de texto llamado “4letter” en mis recursos y el siguiente es mi código:

NSError *error; //READ NSString *dbFile = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"txt"]; NSString *test = [NSString stringWithContentsOfFile:dbFile encoding:NSUTF8StringEncoding error:&error]; //convert from string to array NSArray *lines = [test componentsSeparatedByString:@"\n"]; NSFileHandle *logFile = nil; logFile = [NSFileHandle fileHandleForWritingAtPath:[[NSBundle mainBundle] pathForResource:@"4letter" ofType:@"txt"]]; //Test if write works for (int i=0; i<5; i++) { NSString *randomAnagram = [[lines objectAtIndex:i] lowercaseString]; [logFile writeData: [randomAnagram dataUsingEncoding: NSNEXTSTEPStringEncoding]]; } 

En iOS, no puedes escribir en un archivo en el paquete de tu aplicación; todo el paquete es de solo lectura. Use una ruta en la carpeta Documentos en su lugar.

Consulte la Guía de progtwigción del sistema de archivos especial para conocer mejor.
En iOS, no puedes escribir en un archivo en el paquete de tu aplicación; todo el paquete es de solo lectura.

Considere leer las Pautas de almacenamiento de datos de iOS para comprender mejor el propósito de los directorios a continuación, en el contexto de la copia de seguridad de iCloud.

/AppName.app

Este es el directorio del paquete que contiene la aplicación en sí. No escriba nada en este directorio. Para evitar alteraciones, el directorio del paquete se firma en el momento de la instalación. Escribir en este directorio cambia la firma y evita que su aplicación se inicie de nuevo.


/ Documents /

Utilice este directorio para almacenar documentos de usuario críticos y archivos de datos de aplicaciones. Los datos críticos son cualquier información que su aplicación no puede recrear, como el contenido generado por el usuario. El contenido de este directorio puede estar disponible para el usuario mediante el uso compartido de archivos. El contenido de este directorio está respaldado por iTunes.


/ Library /

Este directorio es el directorio de nivel superior para archivos que no son archivos de datos de usuario. Por lo general, coloca los archivos en uno de los varios subdirectorios estándar, pero también puede crear subdirectorios personalizados para los archivos que desea copiar pero no para el usuario. No debe usar este directorio para los archivos de datos del usuario. El contenido de este directorio (con la excepción del subdirectorio Caches) está respaldado por iTunes. Para obtener información adicional sobre el directorio de la biblioteca, consulte “Archivos específicos de la aplicación de tiendas de directorios de la biblioteca”.

Consulte la lista completa (tmp /, Documentos / Bandeja de entrada) en los directorios estándar de iOS: donde residen los archivos

ACTUALIZAR
Yo uso el método URLForDirectory:inDomain:appropriateForURL:create:error:

Como dijo Caleb, no puede escribir en el directorio de su aplicación, pero puede escribir en la carpeta Documentos de su aplicación. Puedes obtenerlo así:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

El paquete de su aplicación es de solo lectura. Hay dos maneras en que pude ver:

1) Escribir en la carpeta de documentos:

 NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [myPathList objectAtIndex:0]; 

2) Usa la base de datos sqlite. Esto es lo mismo que 1 (debe guardar db en documentos de todos modos), pero está usando la base de datos sqlite. Creo que esto es mejor que muchos archivos txt y plist: aquí hay un tutorial sobre el tema .

Yo uso el siguiente código:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"set.txt"]; NSString *data=@"Kostas"; [data writeToFile:appFile atomically:YES]; NSString *myData = [NSString stringWithContentsOfFile:appFile]; NSLog(@"Data : %@ ",myData);