我有一个现有文件,我想删除它的内容,然后再次写入,但只能逐行添加。这是我的代码,不知道为什么它不起作用:
if ([filemgr removeItemAtPath: fileName error: NULL] == YES){
NSLog (@"Remove successful");
}
else{
NSLog (@"Remove failed");
}
NSString *cachePath = [[NSString alloc] initWithFormat:@"%@",fileName];
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:cachePath];
BOOL isFirst = NO;
for(id entry in serializedObjects){
NSString *sectionName = [NSString stringWithFormat:@"!%@\n", entry];
[fileHandler writeData:[sectionName dataUsingEncoding:NSUTF8StringEncoding]];
if (!isFirst) {
[fileHandler seekToEndOfFile];
isFirst = YES;
}
NSArray *list = [serializedObjects objectForKey:entry];
for (int i = 0; i < list.count; i++) {
NSString *line = [[list objectAtIndex:i] stringByAppendingString:@"\n"];
[fileHandler writeData:[line dataUsingEncoding:NSUTF8StringEncoding]];
}
[fileHandler writeData:[[NSString stringWithFormat:@"%@", @"~\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[fileHandler closeFile];
我的想法是将第一行写入文件并附加其他文件。有谁看到我在这里做错了什么?
此方法完成后,我看到没有错误,但手动检查后,我正在尝试写入的文件不存在。
答案 0 :(得分:0)
您的文件句柄写入I / O缓冲区,该缓冲区不会立即写入磁盘。因为io很慢,所以这是内置到文件句柄对象中的效率。要确保写入磁盘,必须使用synchronizeFile刷新io缓冲区。完成文件句柄后也需要调用closeFile(它也会同步,因此同步是可选的)。