2011-01-07 13 views
7

Ich muss einige Daten von Zeit zu Zeit in eine Datei schreiben und daran anhängen.writeToFile in OSX, Anhängen an die Datei?

Im Moment habe ich:

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

Wie konnte ich bis zum Ende der Datei anhängen die neuen Inhalte von raw?

Antwort

6

Eine Methode wäre, einen NSFileHandle mit fileHandleForWritingAtPath zu erhalten: Methode, konvertieren Sie Ihren NSString in NSData und rufen Sie dann writeData: auf Ihrem NSFileHandle nach dem Verschieben des Dateizeigers an das Ende der Datei.

+0

Korrekt. -writeTo ... überschreiben die Datei mit dem Inhalt, der gerade geschrieben wird. Es gibt kein "appendTo ..." Äquivalent. –

+0

Obwohl ich mir nicht vorstellen kann, wäre es sehr schwer, eine Kategorie-Methode auf NSString zu schreiben, die eine appendToFile ... – ericg

19

Hier ist eine NSString-Kategorie-Methode, die den Empfänger an den angegebenen Pfad mit der angegebenen Codierung anhängen wird (normalerweise 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 für die Bereitstellung des Codes implementiert, der den Job erledigt. (IMO, das sollte die akzeptierte Antwort sein.) – Olie

+0

+1 arbeitete auch für mich :) – eento

1

Li'l bearbeiten zu Peter N Lewis Antwort:

- (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; 
} 

Anruf Wo immer Sie

[self appendToFile:fileName encoding:NSUTF8StringEncoding]; 
1

strcontentself kann sein möchten, wenn Sie diese Methode zu einem Catagory von NSString setzen .