iPhone文件损坏
-
21-09-2019 - |
题
是否有可能(在iPhone / iPod Touch的)书面像这样的文件:
if (FILE* file = fopen(filename, "wb")) {
fwrite(buf, buf_size, 1, file);
fclose(file);
}
要遭到损坏,例如当应用程序被强制终止?
这是我所知道的fwrite应该是一个原子操作,所以当我写整个文件用一条指令没有腐败应该occure。我找不到会说,否则在网络上的任何信息。
解决方案
由于当fwrite
是原子?我找不到任何引用。无论如何,即使fwrite
可以是原子,fopen
和fwrite
之间的时间的不的,因此,如果您的应用程序被强制那些时间之间终止,你会得到一个空文件。
当你正在编写的iPhoneOS,您可以使用-[NSData writeToFile:atomically:]
确保整个开写关闭过程是原子(它的工作原理是写一个临时文件,然后替换原来的一个。)
其他提示
您可以做的事情为自己更容易使用的具有writeToFile:atomically:
方法的NSData 类等你。包装与NSData
原始缓冲器不硬,有所述dataWithBytes:length
或dataWithBytesNoCopy:length:freeWhenDone:
初始化。
与fwrite
写入的数据被缓冲。所以突然中止可能不会刷新缓冲区。 fclose
将刷新缓冲器但这并不暗示该字节也写入到磁盘(由于OS级高速缓存)AFAIK。
不隶属于 StackOverflow