任何不使用fopen的原因()

时间:2011-07-30 18:38:17

标签: iphone objective-c

---------编辑

我发现最简单的就是使用

写文本文件的行

fopen()函数 fputs()的 FCLOSE()

是否有任何理由使用下面答案中指出的其他一些代码?

-------结束编辑

我找到了写入文本文件的不同代码示例。我查看了苹果开发网站,但也无法在那里找到一个好的答案。好像你可以使用fopen()和fwrite(),但我也找不到好的例子。以下是我正在尝试使用的内容,它确实有效。但是我需要在文件中写多行。您将在下面的示例结尾处看到我将文件写入2次,但最终输出中只有一行。

你如何写多行?

这是使用“Apple iPhone”标准的正确代码吗?

        NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *parentDir = [paths objectAtIndex:0];

    (void)[[NSFileManager defaultManager]
           createDirectoryAtPath:parentDir
           withIntermediateDirectories:YES
           attributes:nil error:NULL];

    NSString *path = [parentDir stringByAppendingPathComponent:@"myFile.txt"];



    NSString *SendStr = [[NSString alloc]  initWithFormat:@"This is a test\r\n"];    

    NSData *data0 = [ SendStr dataUsingEncoding:NSUTF8StringEncoding];

    NSData* data = [[NSData alloc] initWithData:data0 ];


    NSError *error = nil;

    [data writeToFile:path options:NSDataWritingAtomic error:&error];

   [data writeToFile:path options:NSDataWritingAtomic error:&error];

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

NSString有将其内容写入文件的方法,因此不需要将其转换为NSData,只需一行即可:

[sendStr writeToFile:path atomically:YES encoding:NSUTF8Encoding error:&error];

如果要立即将多行写入文件,可以将它们累积到1个字符串对象中(可能使用NSMutableString)并写为一个字符串。如果您不能这样做并且想要将行附加到现有行,则必须使用NSFileHandle类(因为编写NSString或NSData的方法简单地覆盖现有文件):

NSData *data = [sendStr dataUsingEncoding:NSUTF8StringEncoding];
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:path];
[file seekToEndOfFile];
[file writeData: data];

P.S。几句小言论

  • 在objective-c样式中,变量名通常以小写和类名开头 - 大写,所以我更正了sendStr名称
  • 您似乎不需要创建数据变量 - 您可以只使用data0
  • 如果你使用alloc / init创建一个对象,你必须稍后释放它以避免内存泄漏 - 所以你的代码最后应该有[sendStr release];[data release];