Я пытаюсь написать script, который автоматически проверяет или обновляет URL-адрес Subversion на основе того, существует или нет указанный каталог.
По какой-то причине мой код не работает и всегда возвращает true, даже если он неверен:
def directory_exists?(directory)
return false if Dir[directory] == nil
true
end
Что я делаю неправильно?
Ответ 1
Если важно, будет ли файл, который вы ищете, directory, а не только файл, вы можете использовать File.directory?
или Dir.exist?
. Это вернет true, только если файл существует и является каталогом.
В стороне, более идиоматичным способом написания метода было бы воспользоваться тем фактом, что Ruby автоматически возвращает результат последнего выражения внутри метода. Таким образом, вы можете написать это следующим образом:
def directory_exists?(directory)
File.directory?(directory)
end
Обратите внимание, что использование метода в данном случае не требуется.
Ответ 2
Все остальные ответы правильные, однако у вас могут быть проблемы, если вы пытаетесь проверить каталог в домашнем каталоге пользователя. Перед проверкой убедитесь, что вы выделили относительный путь:
File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true
Ответ 3
Вы также можете использовать Dir::exist?
так:
Dir.exist?('Directory Name')
Возвращает true
, если "Имя каталога" является каталогом, false
иначе. 1
Ответ 4
File.exist?("directory")
Dir[]
возвращает массив, поэтому он никогда не будет nil
. Если вы хотите сделать это по-своему, вы можете сделать
Dir["directory"].empty?
который вернет true
, если он не найден.
Ответ 5
Вы можете использовать Kernel#test
:
test ?d, 'some directory'