我正在尝试执行以下操作:
- 读取文件的属性
- 如果属性符合某个条件, 删除文件
现在我正在使用 NSFileManager
执行 attributesOfItemAtPath:error:
,然后是 removeItemAtPath:error:
。我担心这两个操作之间会发生某些事情,使初始检查无效。
使这两个操作成为原子操作的最佳方法是什么?
编辑
到目前为止的答案建议文件锁定,我已经尝试研究过。我能找到的最接近的东西是设置 NSFileImmutable
旗帜。但似乎任何其他程序都可以出现、取消设置并修改文件。有没有更好的方法来锁定文件?
编辑2
有人要求用例。假设我正在尝试使两个文件夹保持同步。对一个文件夹中的文件所做的任何更改都会反射(reflect)在另一个文件夹中,反之亦然。如果我从文件夹 A 中删除文件 1,我也会从文件夹 B 中删除文件 1。但是如果文件夹 B 中的文件 1 在我删除它之前发生了变化;然后我不想删除它,而是想将它同步回文件夹 A
最佳答案
您可以使用强制(内核强制)文件锁定来锁定有问题的文件,以防止在操作文件时对文件进行更改。我知道 Linux 和 Solaris 支持强制文件锁定,但我不知道 OS X/HFS+ 是否支持以及如何使用它。希望这会有所帮助。
关于objective-c - OSX 中的事务性文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782806/