是否有可能(在iPhone / iPod Touch的)书面像这样的文件:


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

要遭到损坏,例如当应用程序被强制终止?

这是我所知道的fwrite应该是一个原子操作,所以当我写整个文件用一条指令没有腐败应该occure。我找不到会说,否则在网络上的任何信息。

有帮助吗?

解决方案

由于当fwrite是原子?我找不到任何引用。无论如何,即使fwrite可以是原子,fopenfwrite之间的时间的的,因此,如果您的应用程序被强制那些时间之间终止,你会得到一个空文件。

当你正在编写的iPhoneOS,您可以使用-[NSData writeToFile:atomically:]确保整个开写关闭过程是原子(它的工作原理是写一个临时文件,然后替换原来的一个。)

其他提示

您可以做的事情为自己更容易使用的具有writeToFile:atomically:方法的NSData 类等你。包装与NSData原始缓冲器不硬,有所述dataWithBytes:lengthdataWithBytesNoCopy:length:freeWhenDone:初始化。

fwrite写入的数据被缓冲。所以突然中止可能不会刷新缓冲区。 fclose将刷新缓冲器但这并不暗示该字节也写入到磁盘(由于OS级高速缓存)AFAIK。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top