将NSString对象写入文件的典型方法是什么?

时间:2009-07-15 13:15:12

标签: objective-c

作为一个例子,我想写一些字符串值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通常写入文件的方式吗?也就是说,首先转换为NSData对象,然后使用bytes并将结果转换为uint8_t NSOutputStream的{​​{1}}?

是否有更频繁使用的替代品?

编辑:需要将多个write附加到同一个文件,因此上面的循环。

2 个答案:

答案 0 :(得分:13)

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会在取消分配时自动关闭,但我希望在完成后明确关闭它。

答案 1 :(得分:4)

我通常使用NSString的方法writeToFile:atomically:encoding:error:writeToURL:atomically:encoding:error:来写入文件。

有关详细信息,请参阅String Programming Guide for Cocoa