假设你关闭了一个红宝石File
对象
f = File.open('testfile')
f.close
f.each_byte { ... } #=> IOError: closed stream
我知道您可以通过 重新打开流f = File.open(f)
,但是有没有办法通过IO
对象上的方法重新打开流?
例如
f.close
f.open_again
f.each_byte { ... }
IO#close
文档说:
关闭 → 无
关闭 ios 并将所有挂起的写入刷新到操作系统。该流不可用于任何进一步的数据操作;如果进行此类尝试,则会引发 IOError。
这意味着您不能再次重新打开同一个流,因为到那时它也可能已经关闭了底层文件描述符。
给你reopen
的是,你可以让这个对象指向另一个流/文件。如果您的 IO 对象绑定到一个常量,则可能很有用,但您需要关闭文件并重新打开另一个文件。
File
超类IO
优惠IO#rewind
。这适用于文件等持久资源,但不适用于管道、tty 和套接字等真正的流。