3
なぜRubyのFile#read
とFile#readlines
は1回だけ使用できますか?例えばなぜRuby File#readまたはFile#readlineは1回だけ使用できますか?
:
txt = File.open "test.txt"
puts txt.read # returns the content
puts txt.read # returns ""
なぜRubyのFile#read
とFile#readlines
は1回だけ使用できますか?例えばなぜRuby File#readまたはFile#readlineは1回だけ使用できますか?
:
txt = File.open "test.txt"
puts txt.read # returns the content
puts txt.read # returns ""
あなたがファイルにI/Oストリームを開いているFile.open
呼び出します。内部的には、ストリームには「カーソル」があります。これは最後に読み込んだ部分を表します。長さ引数を持たないFile#read
を呼び出すと、ストリームの終わり(ファイルの終わり)までカーソル(ファイルを開くときにファイルの先頭で始まります)から読み込みます。そうすると、カーソルもファイルの最後に移動します。 read
を再度呼び出すと、カーソルはまだファイルの最後にあり、何も読み取らないため何も返しません(""
)。
ファイルをもう一度読み取る必要がある場合は、File#rewind
を使用してカーソルをストリームの先頭に戻すことができます。