Escribe un archivo en iOS

78

¿Cómo escribo un archivo en iOS? Estoy tratando de hacerlo con el siguiente código pero estoy haciendo algo mal:

char *saves = "abcd";
NSData *data = [[NSData alloc] initWithBytes:saves length:4]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile"];
[data writeToFile:appFile atomically:YES];

He creado MyFile.txt en recursos.

Riccardo Queri
fuente
4
Describe exactamente lo que está fallando.
Shaggy Frog

Respuestas:

26

Su código está funcionando al final, lo acabo de probar. ¿Dónde verifica sus cambios? Utilice la ruta del directorio de documentos. Para obtener el camino -

NSLog(@"%@",documentsDirectory);

y copie la ruta desde la consola y luego abra el buscador y presione Cmd + shift + gy pegue la ruta aquí y luego abra su archivo

saadnib
fuente
Supongo que aquí es donde me equivoco ... He creado MyFile dentro de mi directorio de aplicaciones de recursos ... Pero no hay cambios allí ... ¿Dónde puedo comprobar o crear el archivo?
Riccardo Queri
108

Puede que esto te sea útil.

//Method writes a string to a text file
-(void) writeToTextFile{
        //get the documents directory:
        NSArray *paths = NSSearchPathForDirectoriesInDomains
            (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];

        //make a file name to write the data to using the documents directory:
        NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
                                                      documentsDirectory];
        //create content - four lines of text
        NSString *content = @"One\nTwo\nThree\nFour\nFive";
        //save content to the documents directory
        [content writeToFile:fileName 
                         atomically:NO 
                               encoding:NSUTF8StringEncoding 
                                      error:nil];

}


//Method retrieves content from documents directory and
//displays it in an alert
-(void) displayContent{
        //get the documents directory:
        NSArray *paths = NSSearchPathForDirectoriesInDomains
                        (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];

        //make a file name to write the data to using the documents directory:
        NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
                                                      documentsDirectory];
        NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                      usedEncoding:nil
                                                             error:nil];
        //use simple alert from my library (see previous post for details)
        [ASFunctions alert:content];
        [content release];

}
Chetan Bhalara
fuente
1
No puedo encontrar el archivo donde escribo, parece que no existe
Riccardo Queri
Puede cambiar la ruta del directorio de documentos.
Chetan Bhalara
use - #define DOCUMENTS_FOLDER [NSHomeDirectory () stringByAppendingPathComponent: @ "Documents"]
Chetan Bhalara
si no hago esto, ¿cuál es el directorio predeterminado para mis archivos?
Riccardo Queri
3
¿Qué es NSStringEncodingConversionAllowLossy? ¿Debería ser la codificación: NSUTF8StringEncoding en su lugar?
Ron
12

Rápido

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] as! String
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    content.writeToFile(fileName, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
}

func loadFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] as! String
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String = String(contentsOfFile: fileName, encoding: NSUTF8StringEncoding, error: nil)!
    println(content)
}

Swift 2

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    do{
        try content.writeToFile(fileName, atomically: false, encoding: NSUTF8StringEncoding)
    }catch _ {

    }

}

func loadFile()->String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] 
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String
    do{
       content = try String(contentsOfFile: fileName, encoding: NSUTF8StringEncoding)
    }catch _{
        content=""
    }
    return content;
}

Swift 3

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    do{
        try content.write(toFile: fileName, atomically: false, encoding: String.Encoding.utf8)
    }catch _ {

    }

}

func loadFile()->String {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String
    do{
        content = try String(contentsOfFile: fileName, encoding: String.Encoding.utf8)
    } catch _{
        content=""
    }
    return content;
}
Dardan
fuente
7

Intenta hacer

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile"];

como

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile.txt"];
visakh7
fuente