напишите toFile в OSX, добавив в файл? - PullRequest
7 голосов
/ 07 января 2011

Мне нужно время от времени записывать некоторые данные в файл, добавляя к нему.

Прямо сейчас у меня есть:

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

Как я могу добавить в конец файла новое содержимое raw?

Ответы [ 5 ]

19 голосов
/ 10 апреля 2012

Вот метод категории NSString, который добавит получателя к указанному пути с указанной кодировкой (обычно 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;
}
6 голосов
/ 07 января 2011

Один из методов - получить NSFileHandle, используя fileHandleForWritingAtPath: метод, преобразовать вашу NSString в NSData, а затем вызвать writeData: для вашего NSFileHandle после перемещения указателя файла в конец файла.

1 голос
/ 27 февраля 2014

strcontent может быть self, когда вы помещаете этот метод в категорию NSString.

1 голос
/ 04 декабря 2013

Li'l edit to Peter N Lewis Ответ:

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

Звони куда хочешь

 [self appendToFile:fileName encoding:NSUTF8StringEncoding];
0 голосов
/ 25 октября 2018

Это моя версия Swift, не совсем такая же, но она работает.Я решил не расширять String, чтобы его можно было использовать в качестве альтернативы записи (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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...