iPhone文件损坏

时间:2010-03-21 12:43:00

标签: iphone file atomic corruption stdio

是否可以(在iPhone / iPod Touch上)使用这样的文件:


if (FILE* file = fopen(filename, "wb")) {
    fwrite(buf, buf_size, 1, file);
    fclose(file);
}

被破坏,例如什么时候应用程序被迫终止?

据我所知,fwrite应该是一个原子操作,所以当我用一条指令写整个文件时,不应该发生损坏。我在网上找不到任何其他信息。

3 个答案:

答案 0 :(得分:1)

您可以让自己更轻松,并使用NSData类等待您的{{3}}类来编写数据。使用writeToFile:atomically:包装原始缓冲区并不难,有NSDatadataWithBytes:length初始值设定项。

答案 1 :(得分:1)

使用fwrite写入的数据被缓冲。因此突然终止可能不会刷新缓冲区。 fclose将刷新缓冲区,但这并不意味着字节也写入磁盘(由于操作系统级别缓存)AFAIK。

答案 2 :(得分:1)

因为fwrite是原子的吗?我找不到任何参考资料。无论如何,即使fwrite可以是原子的,fopenfwrite之间的时间不是,所以如果您的应用被迫在这些时间之间终止,那么我会得到一个空文件。

在为iPhoneOS编写时,您可以使用-[NSData writeToFile:atomically:]来确保整个open-write-close过程是原子的(它通过写入临时文件,然后替换原始文件来工作。)