Каков типичный подход для записи объектов NSString в файл? - PullRequest
7 голосов
/ 15 июля 2009

В качестве примера я хочу записать некоторое строковое значение, str, в файл, "yy", так как оно меняется на каждой итерации цикла. Ниже показано, как я сейчас это реализую:

NSOutputStream *oStream = [[NSOutputStream alloc] initToFileAtPath:@"yy" append:NO];
[oStream open];

while ( ... )
{

    NSString *str = /* has already been set up */

    NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
    [oStream write:r(uint8_t *)[strData bytes] maxLength:[strData length]];

    ...
}

[oStream close];

Не обращая внимания на кодировку UTF-8, которая мне действительно нужна, это как обычно NSString s записывается в файл? То есть, сначала преобразовав объект NSData, затем используя bytes и приведя результат к uint8_t для NSOutputStream 'write?

Существуют ли альтернативы, которые используются чаще?

РЕДАКТИРОВАТЬ: Несколько NSString должны быть добавлены к одному и тому же файлу, следовательно, цикл выше.

Ответы [ 2 ]

13 голосов
/ 15 июля 2009

Решение ctshryock немного отличается от вашего, поскольку вы добавляете по ходу дела, а ctshyrock записывает один файл сразу (перезаписывая предыдущую версию). Для длительного процесса они будут радикально отличаться.

Если вы хотите писать по ходу дела, я обычно использую здесь NSFileHandle вместо NSOutputStream. На мой взгляд, немного проще в использовании.

NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:aPath];
while ( ... )
{
    NSString *str = /* has already been set up */

    [fileHandle writeData:[str dataUsingEncoding:NSUTF8StringEncoding]];
}

[fileHandle closeFile];

Обратите внимание, что fileHandle автоматически закроется, когда он будет освобожден, но мне нравится идти вперед и закрывать его явно, когда я закончу с ним.

4 голосов
/ 15 июля 2009

Я обычно использую методы NSString writeToFile:atomically:encoding:error: или writeToURL:atomically:encoding:error: для записи в файл.

Подробнее см. Руководство по программированию для какао

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...