2011-01-13 2 views
2

Technical Q&A 1497 и this question (чей ответ копируется из технической записки) показывают, что при получении fBsyErr из FSDeleteObject, надлежащее временное решение назвать FSUnlinkObject на 10.5+.удаление файла не удается иногда на Mac

Что такое техническая разница между этими двумя API, FSDeleteObject и FSUnlinkObject (кроме отметить, что FSUnlinkObject не появляется в документации)? Почему unlink будет резервным, а не основным API?

+0

«Функции API» **. API - это набор функций, а не одна функция;) Я терминология нацистов./ontopic - интересный вопрос. Моя мысль заключалась бы в том, что удаление этого будет удалять его навсегда, тогда как unlink просто снимает его с списка (так сказать), но файл все еще существует. Однако я могу ошибаться. – Qix

ответ

0

Я бы предположил, что FSDeleteObject пришел первым, потому что он продолжает линию функций удаления файлов, существовавших задолго до того, как Mac OS слилась с Unix, в то время как разблокировка файла представляет собой концепцию Unix.

+0

Означает ли это причину, по которой удаление должно быть предпочтительным? Если это так, я пропущу его. – Richard

0

Документ Apple, который вы связали, объясняет разницу достаточно четко. FSUnlinkObject имеет ту же семантику, что и unlink() - допускается удаление открытых файлов. FSDeleteObject не позволяет удалять открытые файлы и возвращает этот код ошибки при попытке сделать это.

+0

Да, но это ничего не объясняет - почему следует удалить первичный и отменить резервную операцию, если она занята? Почему бы не использовать unlink все время? – Richard

+1

@ Рихард: Кто говорит, что удаление является основным? Связанные выше вопросы и ответы гласят: «Этот вызов API является предпочтительным решением для предотвращения ошибки при удалении файла с 10,5 и более поздних версий». Но это говорит о том, что не следует постоянно отключать связь: можно попытаться написать код, совместимый с OS 10.4. Вероятно, это была большая проблема, когда Q & A был написан, чем сейчас. – JWWalker

Смежные вопросы