使用块写入文件,无法使用换行符

时间:2017-09-28 17:53:15

标签: ruby

这个是逃避我(没有双关语意)。

第一种方法看起来就像我想要的那样,只是我想把它写到文件中。

def write_dir_two
  Dir.chdir("/vagrant/TestRails/Music")
    Dir.glob('*') do |file|
     if File.ftype(file) == "directory"
       puts Dir.entries(file)
     end
   end
end

现在我无法让新线工作。我尝试了插值,创建了一个"分隔符"变量,即separator = "\n",以及其他一些技巧,但它不行。似乎很容易完成任务,并在其他情况下完成。我把所有非工作解决方案都排除了,但基本上我正在尝试做这样的事情 - music.write(Dir.entries("#{file}\n"))。换句话说,每个文件都有自己的行。我也试过file + "\n",但也失败了。

 def write_dir_one
   music = File.new("music_2", 'w')
     Dir.chdir("/vagrant/TestRails/Music")
     Dir.glob('*') do |file|
       if File.ftype(file) == "directory"
         music.write(Dir.entries(file))
       end
     end
 end

puts只是将它格式化到屏幕上做得很好。

编辑:我没有意识到我可以使用file.puts代替file.write。这有效,但如果其他人有不同的,更好的方式,我会暂时保持开放状态。

1 个答案:

答案 0 :(得分:1)

Dir#entries返回指定目录中所有文件的数组,因此执行Dir.entries("#{file}\n")失败,因为您没有具有该名称的目录,并且末尾有换行符。 File#write不起作用的原因是因为它只是在非字符串上调用to_s以在输出它之前将其转换为字符串并且File#puts有效,因为它具体说明了

  

如果使用数组参数调用,则将每个元素写入新行。

因此,如果您想在不使用puts的情况下执行此操作,则可以调用:

music.write(Dir.entries(file).join("\n"))