Как проверить, существует ли данный каталог в 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'
Другие вопросы по тегам