如何从文件创建IO对象?

时间:2012-03-01 04:25:25

标签: ruby io

另一个看似愚蠢的问题,但还没有找到一个明确的例子。

我需要一个IO对象作为函数的参数actually its the new function in this class

我使用这种方式,但在写了一些东西后使用文件描述符作为IO时出现了一些问题:

irb(main):001:0> f= File.open("result.txt","w")
=> #<File:result.txt>
irb(main):002:0> i=IO.new(f.to_i,"w")
=> #<IO:0x3b5cb90>
irb(main):003:0> i.write "hello the world"
=> 15
irb(main):004:0> i.close
=> nil
irb(main):005:0> f.close
Errno::EBADF: Bad file descriptor - result.txt
        from (irb):5:in `close'
        from (irb):5
        from :0

所以我只需要关闭i或f一次?或者有一种标准的方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

FILEIO

的子类
irb(main):001:0> File.superclass
=> IO 

在您的情况下,i和f指的是同一个对象。因此观察。您可以将File对象用于TestRunner。

答案 1 :(得分:0)

你不能做这样的事情:

File.open("result.txt", 'w') do |f|
  t = TestRunner.new(your_suite, NORMAL, f)
  t.start
end

这将使用result.txt文件io对象开始运行测试。即使发生异常,它也会自动关闭文件。