#!/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 /"。有什么帮助吗?
答案 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