2011-01-07 8 views
7

Necesito escribir algunos datos de vez en cuando en un archivo, adjuntándolo.writeToFile en OSX, anexando al archivo?

Ahora mismo tengo:

BOOL ok = [[NSString stringWithFormat:@"%f",raw] writeToFile:path atomically:YES encoding:NSUnicodeStringEncoding error:&error]; 

¿Cómo podría añadir al final del archivo de los nuevos contenidos de raw?

Respuesta

6

Un método sería obtener un NSFileHandle utilizando el método fileHandleForWritingAtPath: convirtiendo NSString en NSData y luego llamando a writeData: en su NSFileHandle después de mover el puntero del archivo al final del archivo.

+0

Correcto. -writeTo ... métodos sobrescriben el archivo con los contenidos que se escriben. No hay equivalente "appendTo ...". –

+0

Aunque, no me imagino que sería muy difícil escribir un método de categoría en NSString que implementa un appendToFile ... – ericg

19

Aquí hay un método de categoría NSString que anexará el receptor a la ruta especificada con la codificación especificada (normalmente NSUTF8StringEncoding).

- (BOOL) appendToFile:(NSString *)path encoding:(NSStringEncoding)enc; 
{ 
    BOOL result = YES; 
    NSFileHandle* fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    if (!fh) { 
     [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 
     fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    } 
    if (!fh) return NO; 
    @try { 
     [fh seekToEndOfFile]; 
     [fh writeData:[self dataUsingEncoding:enc]]; 
    } 
    @catch (NSException * e) { 
     result = NO; 
    } 
    [fh closeFile]; 
    return result; 
} 
+1

+1 para suministrar el código que hace el trabajo. (IMO, esta debería ser la respuesta aceptada). – Olie

+0

+1 también funcionó para mí :) – eento

1

Li'l edición a Peter N Lewis Respuesta:

- (BOOL) appendToFile:(NSString *)path encoding:(NSStringEncoding)enc; 
{ 
    BOOL result = YES; 
    NSFileHandle* fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    if (!fh) { 
     [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 
     fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    } 
    if (!fh) return NO; 
    @try { 
     [fh seekToEndOfFile]; 
     [fh writeData:[strcontent dataUsingEncoding:enc]]; 
    } 
    @catch (NSException * e) { 
     result = NO; 
    } 
    [fh closeFile]; 
    return result; 
} 

llamada Donde quiera que usted quiere

[self appendToFile:fileName encoding:NSUTF8StringEncoding]; 
1

strcontent puede haber self cuando se pone este método a un Catagory de NSString .

Cuestiones relacionadas