4

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

2 回答 2

5

IO#close文档说:

关闭 → 无

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

这意味着您不能再次重新打开同一个流,因为到那时它也可能已经关闭了底层文件描述符。

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

于 2012-11-09T20:55:05.477 回答
0

File超类IO优惠IO#rewind。这适用于文件等持久资源,但不适用于管道、tty 和套接字等真正的流。

于 2012-11-09T18:09:23.460 回答