是否可以(在iPhone / iPod Touch上)使用这样的文件:
if (FILE* file = fopen(filename, "wb")) {
fwrite(buf, buf_size, 1, file);
fclose(file);
}
被破坏,例如什么时候应用程序被迫终止?
据我所知,fwrite应该是一个原子操作,所以当我用一条指令写整个文件时,不应该发生损坏。我在网上找不到任何其他信息。
答案 0 :(得分:1)
您可以让自己更轻松,并使用NSData类等待您的{{3}}类来编写数据。使用writeToFile:atomically:
包装原始缓冲区并不难,有NSData
或dataWithBytes:length
初始值设定项。
答案 1 :(得分:1)
使用fwrite
写入的数据被缓冲。因此突然终止可能不会刷新缓冲区。 fclose
将刷新缓冲区,但这并不意味着字节也写入磁盘(由于操作系统级别缓存)AFAIK。
答案 2 :(得分:1)
因为fwrite
是原子的吗?我找不到任何参考资料。无论如何,即使fwrite
可以是原子的,fopen
和fwrite
之间的时间不是,所以如果您的应用被迫在这些时间之间终止,那么我会得到一个空文件。
在为iPhoneOS编写时,您可以使用-[NSData writeToFile:atomically:]
来确保整个open-write-close过程是原子的(它通过写入临时文件,然后替换原始文件来工作。)