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

时间:2015-03-26 16:44:32

标签: ruby-on-rails ruby parameters directory ruby-1.9.3

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

它总是让我失意!即使我知道用户输入是一个目录。我认为(p)不作为参数。所以我认为它说p不是用户输入的目录,例如" / usr / bin /"。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

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方法:

  

从字符串的右侧和左侧剥离整个Unicode空格范围。

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

答案 1 :(得分:1)

使用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