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 に答える