使用writeToFile:atomically:连续不起作用......为什么?

时间:2012-05-11 12:19:02

标签: iphone ios5 writetofile

我正在尝试编写一个csv文件。我手边有两个数组 - 一个是标题(名称,数字等),另一个是实际值(Jon,123 ......)。

现在,经过以下两项操作:

[[titles componentsJoinedByString:@", "] writeToFile:file atomically:YES];

[[values componentsJoinedByString:@", "] writeToFile:file atomically:YES];

只将values数组写入文件。我意识到我可能需要再次打开文件,但是在编写第一个数组后我该怎么做?或者如果不是这样的话我到底错了什么呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

第二行实际上是覆盖了你在第一行写的文件。解决这个问题的一个简单方法是简单地将第二个字符串附加到第一个字符串(可能是因为你制作了一个csv文件,其中包含'\ n')并将该字符串写入你的文件:

NSString *str1 = [[titles componentsJoinedByString:@", "];
NSString *str2 = [[values componentsJoinedByString:@", "];
NSString *outputStr = [str1 stringByAppendingFormat:@"\n%@", str2];
[outputStr writeToFile:file atomically:YES];

答案 1 :(得分:0)

第二次取代旧内容。因此,您可以阅读旧内容,使用新内容附加旧内容并保存到文件中。

写第一行

[[titles componentsJoinedByString:@", "] writeToFile:file atomically:YES];

每次需要添加另一行时

NSString *previousContent = [[NSString alloc] initWithContentsOfFile:file usedEncoding:nil error:nil];
NSString *str2 = [[values componentsJoinedByString:@", "];
NSString *outputStr = [previousContent stringByAppendingFormat:@"\n%@", str2];
[outputStr writeToFile:file atomically:YES];