1

我有一个现有文件,我想删除它的内容,然后再次写入,但只能逐行附加。这是我的代码,不确定为什么它不起作用:

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];

我的想法是将第一行写入文件并附加其他行。有人看到我在这里做错了吗?

此方法完成后,我看不到任何错误,但在我手动检查后,我尝试写入的文件不存在。

4

1 回答 1

0

您的文件句柄写入不会立即写入磁盘的 I/O 缓冲区。因为 io 很慢,这是文件句柄对象中内置的效率。为确保它写入磁盘,您必须使用 synchronizeFile 刷新 io 缓冲区。完成文件句柄后,您还需要调用 closeFile(这也将同步,因此同步是可选的)。

于 2012-05-10T14:43:53.347 回答