Ruby说文件不存在



我是Ruby的新手,我正在编写一个测试程序,只是为了了解一些功能。这是程序

#!/usr/bin/env ruby
class FileManager
  def read_file(filename)
    return nil unless File.exist?(filename)
    File.read(filename)
  end
end
if __FILE__ == $0
  fm = FileManager.new
  puts "What file would you like to open?"
  fname = gets
  puts fm.read_file fname
end

正如你所看到的,它非常简单。如果我评论read_file方法的第一行,我会得到这个错误

No such file or directory - /Users/macuser/Projects/Aptana Studio 3 Workspace/Ruby Test/text (Errno::ENOENT)
from /Users/macuser/Projects/Aptana Studio 3 Workspace/Ruby Test/ruby.rb:6:in `read_file'
from /Users/macuser/Projects/Aptana Studio 3 Workspace/Ruby Test/ruby.rb:15:in `<main>'

当我运行程序并使用此文件时:/Users/macuser/Projects/Aptana Studio 3 Workspace/Ruby Test/text

但是,如果我运行cat /Users/macuser/Projects/Aptana Studio 3 Workspace/Ruby Test/text,它会输出Hello, world!,这是应该的。

我不认为这是权限问题,因为我拥有这个文件夹,但以防万一我已经尝试以root身份运行该程序。此外,我已经确保fname是文件的实际名称,而不是nil。我已经尝试了该路径的转义版本和未转义版本,以及仅text或完整路径。我知道这个文件确实存在,那么Ruby为什么会给我这个错误呢?

对于gets filename,文件名包括换行n

你必须在你的文件名中删除它:

gets filename 
p filename        #"test.rbn"
p File.exist?(filename) #false
p File.exist?(filename.chomp) #true

(您不需要屏蔽空格)

即使gets不通过shell,看起来你也在shell中逃离你的空间。您要输入"/Users/macuser/Projects/Aptana Studio 3 Workspace/Rube Test/text",而不是"/Users/macuser/PProjects/Aptana\Studio\3\Workspace/RubyTest/text"。

相关内容

  • 没有找到相关文章

最新更新