gpt4 book ai didi

iphone - 复制时如何用 NSFileManager 覆盖文件?

转载 作者:IT王子 更新时间:2023-10-29 07:37:48 27 4
gpt4 key购买 nike

我正在使用这种方法来复制文件:

[fileManager copyItemAtPath:sourcePath toPath:targetPath error:&error];

我想覆盖一个已经存在的文件。此方法的默认行为是抛出异常/错误“文件存在”。当文件存在时。没有指定它应该覆盖的选项。

那么最安全的方法是什么?

我会先检查文件是否存在,然后删除它,然后尝试复制吗?这有这样的危险,即应用程序或设备在文件被删除但新文件尚未复制到该位置后的纳秒内立即关闭。然后什么都没有。

也许我必须先更改新文件的名称,然后删除旧文件,然后重新更改新文件的名称?同样的问题。如果在这一纳秒内应用程序或设备关闭并且重命名没有发生怎么办?

最佳答案

如果您不能/不想将文件内容保留在内存中,但想要按照其他建议中的说明进行原子重写,您可以先将原始文件复制到临时目录的唯一路径(Apple 的文档建议使用临时目录),然后使用 NSFileManager 的

-replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:

根据引用文档,此方法“以确保不会丢失数据的方式替换指定 URL 中项目的内容。” (来自引用文档)。需要将原始文件复制到临时目录,因为此方法会移动原始文件。 Here's the NSFileManager reference documentation about -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:

关于iphone - 复制时如何用 NSFileManager 覆盖文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com