【问题标题】:Will writeToFile:atomically: overwrite data?writeToFile:atomically: 会覆盖数据吗?
【发布时间】:2011-10-20 00:56:41
【问题描述】:

非常简单的问题,但在 Apple 的文档中似乎并不清楚。

writeToFile:atomically: for NSDataNSArray 等会覆盖文件上的现有数据吗?

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    是的。 writeToFile:atomically: 会。

    【讨论】:

    • 您是否以原子方式执行并不重要;无论哪种情况,文件都将被新数据完全覆盖。
    • 啊,但对我来说它失败了,原始文件完好无损。由于 writeToFile 不返回 NSError,我该如何调查失败?这可能是权限问题,但我不能确定。我的代码作为安装程序插件包运行,用于需要 root 权限的安装包——我不知道如何验证/打印我的代码运行的权限。
    • @MottiShneor 你可以使用 -writeToURL:options:error: 代替,它确实有一个错误参数。
    【解决方案2】:

    方法writeToFile:atomically: 总是覆盖文件,不管atomically:是或否。

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

    NSData 类及其子类提供了快速和 轻松将其内容保存到磁盘。为了最大限度地降低数据丢失的风险, 这些方法提供了以原子方式保存数据的选项。原子 写保证数据要么完整保存,要么 完全失败。原子写入首先将数据写入 临时文件。如果此写入成功,则该方法移动 临时文件到其最终位置。

    没有关于检查文件是否存在的消息。

    例如,对于docs(NSFileManager,讨论部分)中的方法copyItemAtPath:toPath:error:,专门写了关于此类检查:

    如果dstPath已经存在同名文件,这个方法 停止复制尝试并返回相应的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2019-02-20
      • 2011-02-17
      相关资源
      最近更新 更多