2

下面是一段应该读取目录的代码,并为每个文件条目打印文件的第一行。问题是 x 不可见,因此未解析文件。

Dir.foreach("C:/fileload/src") do |file_name|
  x = file_name
  puts x
  f = File.open("C:/fileload/src/" +x)
  f.readlines[1..1].each do |line| 
    puts line 
  end
end
4

2 回答 2

2

你为什么分配xfile_name? 你可以file_name直接使用。如果您只阅读文件的第一行,为什么不试试这个呢?

#!/usr/bin/ruby

dir = "C:/fileload/src"
Dir.foreach(dir) do |file_name|
    full = File.join(dir, file_name)
    if File.file?(full)
        f = File.open(full)
        puts f.first
        f.close
    end
end

您应该使用File.join在 Ruby 中安全地组合路径。我还检查了您是否正在使用File.file 打开文件?方法。

于 2013-04-11T22:37:53.793 回答
2

您对x. 您应该使用File::joinPathname#+构建您的文件路径。您应该将非文件排除在考虑之外。您正在选择第二行,而不是使用[1..1]. 这是您的示例代码的更清洁的正确替换。

dir = "C:/fileload/src"
Dir.foreach(dir).
map    { |fn| File.join(dir,fn) }.
select { |fn| File.file?(fn) }.
each   { |fn| puts File.readlines(fn).first }
于 2013-04-11T23:18:13.733 回答