为什么Ruby说闭合流IOError

  • 本文关键字:IOError Ruby ruby stream
  • 更新时间 :
  • 英文 :


我的程序有问题。它说:"'写入':闭合流(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

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

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对象。

我不知道你的程序的整个结构,但也许你应该在backup方法中实例化File对象。 这就是你应该用 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

  • http://apidock.com/ruby/Kernel/sleep

相关内容

  • 没有找到相关文章

最新更新