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
?
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;
}
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.
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];
strcontent
may be self
when you put this method to a Catagory of NSString.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With