作为一个例子,我想写一些字符串值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
附加到同一个文件,因此上面的循环。
答案 0 :(得分:13)
如果你想要随时写作,我通常在这里使用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