Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

writeToFile in OSX, appending to the file?

Tags:

file

macos

cocoa

I need to write some data from time to time to a file, appending to it.

Right now I have:

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

How could I append to the end of the file the new contents of raw?

like image 279
Cy. Avatar asked Jan 07 '11 14:01

Cy.


4 Answers

Here is an NSString category method that will append the receiver to the specified path with the specified encoding (normally 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;
}
like image 123
Peter N Lewis Avatar answered Oct 20 '22 14:10

Peter N Lewis


One method would be to obtain a NSFileHandle using fileHandleForWritingAtPath: method, converting your NSString to NSData and then calling writeData: on your NSFileHandle after moving the file pointer to the end of the file.

like image 23
ericg Avatar answered Oct 20 '22 14:10

ericg


Li'l edit to Peter N Lewis Answer:

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

Call Where ever you want

 [self appendToFile:fileName encoding:NSUTF8StringEncoding];
like image 1
V.D Avatar answered Oct 20 '22 14:10

V.D


strcontent may be self when you put this method to a Catagory of NSString.

like image 1
Eric Avatar answered Oct 20 '22 16:10

Eric