为什么Ruby说闭流IOError?

时间:2014-02-07 10:27:09

标签: ruby stream

我的程序有问题。它说:“`write':封闭流(IOError)”。

def backup(dir, file, time="")
    fullpath = "#{dir}/#{file}"
    #puts fullpath

        @f.puts "BKP_DATE: #{$date}"
        @f.puts "BKP_DIRECTORY: #{dir}"
        @f.puts "M_TIME: #{time}"
        @f.puts "BKP_FILE: #{file}"


        IO.readlines(fullpath).each do |line|

            @f.puts line
        end
        @f.close()

end

1 个答案:

答案 0 :(得分:2)

所以你的程序基本上是这样的:

f = File.open("foo.dat", "w")

f.puts "BKP_DATE: "
...
IO.readlines(fullpath).each do |line|
    f.puts line
end
f.close
f.puts "BKP_DATE: "
...
IO.readlines(fullpath).each do |line|
    f.puts line
end
f.close

您尝试close两次File个对象。

我不知道你的程序的整个结构,但也许你应该在File方法中实例化backup对象。这就是你应该如何在Ruby中编写它(:

File.open("foo.dat", "w") {|f|
    f.puts "BKP_DATE: "
    IO.readlines(fullpath).each do |line|
        f.puts line
    end
} # f is automatically closed here

如果您确实需要在backup方法之外打开文件,我认为您在bakcup末尾所需的内容是@f.flush而不是@f.close。如果您不在脚本中打开数百个文件,这对您来说是一个可接受的解决方案。

至于暂停,请尝试sleep 5.0