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
#!/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