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

Ben*_*ver 7 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];
Run Code Online (Sandbox Code Playgroud)

忽略我需要的UTF-8编码,这NSString通常是如何写入文件的?也就是说,首先转换为一个NSData对象,然后使用bytes并将结果转换uint8_tNSOutputStream's write

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

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

Rob*_*ier 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];
Run Code Online (Sandbox Code Playgroud)

请注意,fileHandle当它被解除分配时会自动关闭,但我喜欢在我完成它之后继续显式关闭它.

  • 我对'09的评论不正确.该文件必须存在. (5认同)