下面是一段应该读取目录的代码,并为每个文件条目打印文件的第一行。问题是 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
下面是一段应该读取目录的代码,并为每个文件条目打印文件的第一行。问题是 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
你为什么分配x
给file_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 打开文件?方法。
您对x
. 您应该使用File::join
或Pathname#+
构建您的文件路径。您应该将非文件排除在考虑之外。您正在选择第二行,而不是使用[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 }