такое ruby ​​rm_rf асинхронный? - PullRequest
4 голосов
/ 13 декабря 2011

если я делаю

rm_rf('somewhere')
mkdir('somewhere')

время от времени, mkdir выдает Permission Denined.Это связано с тем, что rm_rf работает асинхронно и иногда не завершает удаление каталога до запуска mkdir?

Как заблокировать его до завершения удаления?

, выполняющего это наWindows между прочим.

Спасибо

Ответы [ 2 ]

4 голосов
/ 13 декабря 2011

Похоже на функцию NTFS, см. Поддержка Microsoft :

Этот файл находится в состоянии, ожидающем удаления. Этот файл был удален, но есть все еще открытые ручки к нему. NTFS будет ждать до все дескрипторы этого файла закрываются перед обновлением индекса. Если попытка доступа к файлу, однако NTFS будет отрицать попытка. Поскольку файл указан в индексе, но эффективно удален, вы можете увидеть файл, но не можете получить к нему доступ.

И, глядя на решения, я не думаю, что есть что-то еще, кроме как ждать и повторить попытку.

3 голосов
/ 13 декабря 2011

rm_rf является синхронным , как и любой другой обычный метод ruby.

и если это не так, то вы, вероятно, получите ошибку Errno::EEXIST, но вы получите «разрешение запрещено».

в качестве обходного пути попробуйте вставить небольшую задержку, например sleep(0.1) между rm_rf & mkdir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...