如果我有一个 ACL 规则为 的可写文件deny delete
,则任何[plistableObject writeFoFile:undeletableFile atomically:YES]
调用都会返回NO
,而非原子写入会成功。
我知道,原子写入意味着写入一个临时文件,并且——如果写入成功——最终重命名。不过,它的这种特殊含义感觉很奇怪。
所以我想知道,这是因为...
- HFS+ 中缺少直接的“重命名”,
- 实施中的缺陷
-[NS(Array|Dictionary|Data|String) writeToFile:atomically:]
或 - Mac OS X 中 ACL 实现的缺陷?
提前致谢
丹尼尔
原始问题:
前几天我在从备份中恢复的 Mac 上发现了这种奇怪的行为:
大多数应用程序都无法保留它们的首选项——尤其是 Mail.app,它发出错误消息警告,表明它无法写入~/Library/Preferences
.
深入挖掘,我发现——不知何故——大多数 plist 都有一个带有指令的 ACL group:everyone deny delete
;放弃这条规则挽救了一天。
我怀疑NSArray|NSDictionary|NSWhatHaveYou
'writeToFile:atomically:
应对这种行为负责*,而且——果然——我写的测试工具只有在NO
作为第二个参数传递时才会成功,如果文件存在并且有这样的 ACL 就位......
(*“负责”我只指非写作部分;ACL 情况完全是另外一回事)
所以我想知道:
这是错误还是功能?
虽然 - 从技术上讲 - 此方法写入文件并在完成后重命名它,但从用户的角度来看,它并没有删除任何内容......
如果是错误:
应该针对 NSArray 和朋友提交还是针对 ACL 的实现提交?
任何想法都非常感谢!
干杯
丹尼尔