在File对象上重新打开流

时间:2012-11-09 17:48:11

标签: ruby io

假设您关闭了一个红宝石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 { ... }

2 个答案:

答案 0 :(得分:5)

IO#close文档说:

  

关闭→无

     

关闭ios并刷新对操作系统的任何挂起写入。该流不可用于任何进一步的数据操作;如果进行了这样的尝试,则会引发IOError。

这意味着您无法再次重新打开相同的流,因为它可能已经关闭了基础文件描述符。

reopen为您提供的是,您可以将此对象指向另一个流/文件。如果您的IO对象绑定到常量,但是您需要关闭该文件并重新打开另一个文件,这可能很有用。

答案 1 :(得分:0)

File超类IO提供IO#rewind。这适用于文件等持久性资源,但不适用于管道,ttys和套接字等真正的流。

相关问题