Apple рекомендує не покладатися на метод fileExistAtPath:. Часто краще просто спробувати відкрити файл і вирішити помилку, якщо файл не існує.
Довідка про клас NSFileManager
Примітка: спроба передбачити поведінку на основі поточного стану файлової системи або певного файлу у файловій системі не рекомендується. Це може спричинити дивну поведінку або перегони. Набагато краще спробувати операцію (наприклад, завантаження файлу чи створення каталогу), перевірити наявність помилок та обробляти ці помилки витончено, ніж це намагатися достроково зрозуміти, чи вдасться виконати операцію. Для отримання додаткової інформації про умови гонки файлової системи див. "Умови гонки та безпечні операції з файлами" в Посібнику з безпечного кодування.
З безпечного посібника з кодування.
Щоб цього не допустити, програми часто перевіряють, щоб переконатися, що тимчасовий файл із конкретним іменем ще не існує в цільовому каталозі. Якщо такий файл існує, програма видаляє його або вибирає нове ім'я для тимчасового файлу, щоб уникнути конфлікту. Якщо цього файлу не існує, програма відкриває файл для запису, оскільки системна програма, яка відкриває файл для запису, автоматично створює новий файл, якщо такий не існує. Зловмисник, безперервно запускаючи програму, яка створює новий тимчасовий файл з відповідним іменем, може (з невеликою наполегливістю та трохи удачі) створити файл у розриві між тим, коли програма перевіряється, щоб переконатися, що тимчасовий файл не існував і коли він відкриває його для написання. Потім програма відкриває файл зловмисника і записує в нього (пам’ятайте, системна процедура відкриває існуючий файл, якщо такий є, і створює новий файл лише у тому випадку, якщо файл не існує). Файл зловмисника може мати різні права доступу, ніж тимчасовий файл програми, тому зловмисник може потім читати вміст. Крім того, зловмисник може вже відкрити файл. Зловмисник може замінити файл жорстким посиланням або символічним посиланням на якийсь інший файл (або той, хто належить зловмиснику, або існуючий системний файл). Наприклад, зловмисник міг би замінити файл символічним посиланням на файл системного пароля, щоб після атаки паролі системи були пошкоджені до того, що ніхто, включаючи системного адміністратора, не зможе увійти. Крім того, зловмисник може вже відкрити файл. Зловмисник може замінити файл жорстким посиланням або символічним посиланням на якийсь інший файл (або той, хто належить зловмиснику, або існуючий системний файл). Наприклад, зловмисник міг би замінити файл символічним посиланням на файл системного пароля, щоб після атаки паролі системи були пошкоджені до того, що ніхто, в тому числі системний адміністратор, не зможе увійти. Крім того, зловмисник може вже відкрити файл. Зловмисник може замінити файл жорстким посиланням або символічним посиланням на якийсь інший файл (або той, хто належить зловмиснику, або існуючий системний файл). Наприклад, зловмисник міг би замінити файл символічним посиланням на файл системного пароля, щоб після атаки паролі системи були пошкоджені до того, що ніхто, в тому числі системний адміністратор, не зможе увійти.