将writeToFile:atomically:覆盖数据吗?


92

这个问题确实很简单,但是在苹果的文档中似乎还不清楚。

请问writeToFile:atomically:NSDataNSArray等覆盖现有的文件中的数据?

Answers:


212

是。它会。

这是一些字符,不能超过30个字符的限制。


20
是否原子操作并不重要;无论哪种情况,文件都会被新数据完全覆盖。
BJ荷马

啊,但是对我来说失败了,原始文件是完整的。由于writeToFile没有返回NSError,我该如何调查故障?这可能是权限问题,但我不确定。我的代码作为需要root特权的安装程序包的安装程序插件包运行-我不知道如何验证/打印出运行我的代码的特权。
Motti Shneor '16

1
@MottiShneor您可以改用-writeToURL:options:error:,它确实具有错误参数。
BJ Homer

6

方法writeToFile:atomically: 始终覆盖文件,无论atomically:是或否。

来自Apple文档的信息(NSData,“保存数据”部分):

NSData类及其子类提供了快速,轻松地将其内容保存到磁盘的方法。为了最大程度地减少数据丢失的风险,这些方法提供了自动保存数据的选项。原子写入可确保数据全部保存或完全失败。原子写入首先将数据写入临时文件。如果此写入成功,则该方法将临时文件移至其最终位置。

关于检查文件是否存在一无所知。

例如,对于方法copyItemAtPath:toPath:error:文档(的NSFileManager,部分讨论)而编写的关于这种检查:

如果dstPath中已经存在同名文件,则此方法将停止复制尝试并返回适当的错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.