ruby中的IO.readlines方法表现得很奇怪?

时间:2013-10-22 11:55:42

标签: ruby io

这听起来很愚蠢,但它给了我3小时的头部撞击...... !! 我创建了一个类方法,我在其中提取文件基名(放在Root文件夹中)。问题是IO.readlines方法不接受带有从提取返回的基本名称的文件。它返回错误:

./lib/fileCheck.rb:36:in `readlines': No such file or directory -  (Errno::ENOENT)

但是一旦我在readlines中手动输入文件基本名称,它就会起作用。这是类方法:

class FileCheck
  def self.read_file
    file = File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s)
    file = IO.readlines(file)
    return file
  end
end

没有结果,但只要我手动放置文件名,它就能完美运行。

  def self.read_file
  #file = File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s)
  file = IO.readlines('sample.txt')
  return file
 end

我用irb和声明检查

File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s) 

返回String类的文件基名。

任何建议?????

1 个答案:

答案 0 :(得分:1)

使用expand_pathjoin无关紧要。您的代码中仍然存在市长问题:

File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s) 

Dir[]也称为Dir.glob返回一个数组!确保选择其中一个元素而不是调用to_s。当有多个文件时,你会遇到问题。