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