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