ルビー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、ソケットなどの実際のストリームでは機能しません。