Если у меня есть файл для записи с ACL-правилом deny delete
, любой вызов [plistableObject writeFoFile:undeletableFile atomically:YES]
возвращает NO
, тогда как неатомарная запись завершается успешно.
Я знаю, что атомарная запись означает, что записан временный файл и & mdash; если написано успешно & mdash; в итоге переименован. Этот конкретный смысл этого кажется странным , хотя.
Интересно, это из-за ...
- отсутствие прямого переименования в HFS +,
- Недостаток в реализации
-[NS(Array|Dictionary|Data|String) writeToFile:atomically:]
или
- Недостаток в реализации ACL в Mac OS X?
Заранее спасибо
Daniel
Оригинальный вопрос:
Такое странное поведение я обнаружил на днях на Mac, восстановленном из резервной копии:
Большинство приложений не смогли сохранить свои предпочтения - особенно Mail.app, который предупреждал с сообщением об ошибке, предполагая, что он не смог записать в ~/Library/Preferences
.
Копая глубже, я обнаружил, что - так или иначе - большинство списков имеют ACL с директивой group:everyone deny delete
; Отказ от этого правила спас день.
Я подозревал, что NSArray|NSDictionary|NSWhatHaveYou
writeToFile:atomically:
несет ответственность * за это поведение и - конечно же, инструмент тестирования, который я написал, успешно работает только при передаче NO
в качестве второго аргумента, если файл существует и имеет такой ACL на месте ...
(* где под "ответственным" я подразумеваю только неписывающую часть; ситуация с ACL была совсем другой)
Так что мне интересно:
Это ошибка или особенность?
Хотя - технически - этот метод записывает файл и после завершения переименовывает его, с точки зрения пользователя он ничего не удаляет ...
Если , это ошибка:
Должно ли оно быть подано против NSArray и друзей или против реализации ACL?
Любые мысли очень ценятся!
Приветствия
Daniel