开发者

writeToFile in OSX, appending to the file?

I ne开发者_如何学Pythoned 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.


This is my Swift version, not exactly the same, but it works. I decided not to extend String so that it could be used as an alternate to write(exportFileNameURL: URL, str: String)

fileprivate static func appendToFile(_ exportFileName: String, str: String) -> Bool {
    let result : Bool = true;
    if let fh : FileHandle = FileHandle.init(forWritingAtPath: exportFileName) {
        fh.seekToEndOfFile()
        fh.write(str.data(using: String.Encoding.utf8)!)
        fh.closeFile()
    }
    else {
        FileManager.default.createFile(atPath: exportFileName, contents: nil, attributes: nil)
        if let fh = FileHandle.init(forWritingAtPath: exportFileName) {
            fh.seekToEndOfFile()
            fh.write(str.data(using: String.Encoding.utf8)!)
            fh.closeFile()
        }
        else {
            return false;
        }
    }
    return result
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜