在File对象上重新打开流

web*_*rts 3 ruby io

假设你关闭一个红宝石File对象

f = File.open('testfile')
f.close
f.each_byte { ... } #=> IOError: closed stream
Run Code Online (Sandbox Code Playgroud)

我知道你可以重新打开流f = File.open(f),但有没有办法通过IO对象上的方法重新打开流?

例如

f.close
f.open_again
f.each_byte { ... }
Run Code Online (Sandbox Code Playgroud)

Laa*_*aas 5

IO#close 文件说:

关闭→无

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

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

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