首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone文件损坏

iPhone文件损坏
EN

Stack Overflow用户
提问于 2010-03-21 20:43:00
回答 3查看 690关注 0票数 1

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

代码语言:javascript
复制
if (FILE* file = fopen(filename, "wb")) {
    fwrite(buf, buf_size, 1, file);
    fclose(file);
}

被破坏,例如当应用程序被强制终止时?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-21 20:48:26

从什么时候开始fwrite是原子的?我找不到任何推荐人。无论如何,即使fwrite可以是原子的,fopenfwrite之间的时间不是原子的,所以如果你的应用程序在这两个时间之间被强制终止,你会得到一个空文件。

在为iPhoneOS编写代码时,可以使用-[NSData writeToFile:atomically:]来确保整个打开-写入-关闭过程是原子的(它的工作方式是写入一个临时文件,然后替换原来的临时文件)。

票数 1
EN

Stack Overflow用户

发布于 2010-03-21 20:47:42

您可以让事情变得更简单,并使用具有等待您的writeToFile:atomically:方法的NSData类来编写数据。用NSData包装原始缓冲区并不难,有dataWithBytes:lengthdataWithBytesNoCopy:length:freeWhenDone:初始化器。

票数 1
EN

Stack Overflow用户

发布于 2010-03-21 20:48:01

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2487085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档