objective-c - OSX 中的事务性文件操作

标签 objective-c macos cocoa filesystems

我正在尝试执行以下操作:

  • 读取文件的属性
  • 如果属性符合某个条件, 删除文件

现在我正在使用 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/

相关文章:

python - Django创建的sqlite数据库文件在哪里?

iphone - 从核心数据获取请求中排除反向关系

cocoa - 检测 cocoa 线程中的泄漏?

ios - 在外部显示器上反射(reflect) UIView 行为

iphone - 从 UIWindow 中删除 UIView

xcode - NS 对象没有可识别的成员

objective-c - Mac OS X 10.8 : Replacement for Lock/UnlockPixels() for the cocoa applications

ios - 什么是 CoreDataGeneratedAccessors?

ios - MKMapView visibleMapRect 属性的奇怪行为

java - .jar 适用于 Windows 和 Linux,但不适用于 OSX