writeToFile in OSX, appending to the file?

前端 未结 5 2002
自闭症患者
自闭症患者 2020-12-20 17:26

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] writeToF         


        
相关标签:
5条回答
  • 2020-12-20 17:47

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

    0 讨论(0)
  • 2020-12-20 17:58

    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;
    }
    
    0 讨论(0)
  • 2020-12-20 18:04

    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];
    
    0 讨论(0)
  • 2020-12-20 18:09

    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.

    0 讨论(0)
  • 2020-12-20 18:13

    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 讨论(0)
提交回复
热议问题