Ruby 1.9.3中,检查用户输入是否为目录

In Ruby 1.9.3, check if the user input is a directory

#!/usr/bin/ruby
puts  "Please enter the path-name of the directory:"
p = STDIN.gets  
isdir = File.directory?(p)  
puts "#{isdir} #{p}"

它总是return我一个假的!即使我知道用户输入是一个目录。我认为 (p) 不能用作参数。所以我认为它说 p 不是目录而不是用户输入,例如“/usr/bin/”。有帮助吗?

p 值并不严格等于您期望的值。末尾包含\n

# in my irb:
1.9.3p392 :010 > p = STDIN.gets  
/home/
 => "/home/\n" 
1.9.3p392 :011 > isdir = File.directory?(p)  
 => false 
1.9.3p392 :012 > isdir = File.directory?(p.strip)  
 => true

strip方法:

Strips entire range of Unicode whitespace from the right and left of the string.

来源:http://apidock.com/rails/ActiveSupport/Multibyte/Chars/strip

使用 p = STDIN.gets '\n' 被追加。相反,您可以使用 gets.chomp。您还需要使用 File.expand_path。检查下面的示例。

# My irb
1.9.3-p545 :002 >   p = gets.chomp
~/.ssh
=> "~/.ssh" 
1.9.3-p545 :003 > File.directory?(p) 
=> false 
1.9.3-p545 :004 > File.exists? File.expand_path(p)
=> true