我正在使用此方法来复制文件:
[fileManager copyItemAtPath:sourcePath toPath:targetPath error:&error];
我想覆盖已经存在的文件。此方法的默认行为是引发异常/错误“文件存在”。当文件存在时。没有选项指定它应该覆盖。
那么最安全的方法是什么?
我会先检查文件是否存在,然后删除它,然后尝试复制吗?这存在这样的危险:应用程序或设备在文件被删除后的纳秒内立即关闭,但新文件尚未复制到该位置。然后就什么都没有了。
也许我必须先更改新文件的名称,然后删除旧文件,然后重新更改新文件的名称?同样的问题。如果在这一纳秒内应用程序或设备关闭并且重命名没有发生怎么办?
如果您不能/不想将文件内容保留在内存中,但想要按照其他建议中所述进行原子重写,您可以首先将原始文件复制到临时目录中的唯一路径(Apple 的文档建议使用临时目录),然后使用 NSFileManager 的
-replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:
根据参考文档,此方法“以确保不会发生数据丢失的方式替换指定 URL 处的项目内容”。 (来自参考文档)。需要将原始文件复制到临时目录,因为此方法会移动原始文件。这是 NSFileManager 参考文档-replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: https://developer.apple.com/reference/foundation/nsfilemanager/1412432-replaceitematurl?language=objc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)