Чи буде writeToFile: atomically: перезаписувати дані?


92

Насправді просте запитання, але, здається, воно не зрозуміле в документах Apple.

Буде чи writeToFile:atomically:для NSData, і NSArrayт.д. перезаписувати існуючі дані про фото?

Відповіді:


212

Так. Це буде.

Ось декілька символів, які перевищують 30 символів.


20
Ви робите це атомно чи ні, не має значення; в будь-якому випадку файл буде повністю перезаписаний новими даними.
BJ Homer

Ах, але для мене це не вдається, і оригінальний файл цілий. Оскільки writeToFile не повертає помилку NSError, як я можу дослідити несправність? це може бути проблемою дозволів, але я не можу бути впевненим. Мій код працює як пакет модулів для інсталятора, для інсталяційного пакету, що вимагає кореневих прав - я не знаю, як перевірити / роздрукувати привілеї, за допомогою яких запускається мій код.
Motti Shneor

1
@MottiShneor Ви можете використовувати -writeToURL: options: error: замість цього, який має параметр помилки.
Б. Дж. Гомер,

7

Метод writeToFile:atomically: ЗАВЖДИ ЗАПЕРЕПІШІТЬ ФАЙЛ , незалежно від atomically:ТАК чи НІ.

Інформація з документів Apple (NSData, розділ "Збереження даних"):

Клас NSData та його підкласи забезпечують методи швидкого та легкого збереження їх вмісту на диск. Щоб мінімізувати ризик втрати даних, ці методи забезпечують можливість атомного збереження даних. Atomic пише гарантує, що дані або зберігаються цілком, або повністю не вдаються. Атомний запис починається із запису даних у тимчасовий файл. Якщо запис вдається, метод переміщує тимчасовий файл до остаточного місця.

Ні слова про перевірку наявності файлу.

Наприклад, для методу copyItemAtPath:toPath:error:в документах (NSFileManager, розділ Обговорення), спеціально написаного про таку перевірку:

Якщо файл з тим самим іменем уже існує в dstPath, цей метод зупиняє спробу копіювання та повертає відповідну помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.