Когда вы читаете или пишете файлу, есть внутренний указатель, названный "курсором", который отслеживает то, где в файле вы в настоящее время. Когда вы пишете файл, курсор установлен в пункт после последнего байта, который вы написали, так, чтобы, если вы выступаете дополнительный, написал, они происходят после того, как ваши предыдущие пишут (а не сверху его). Когда вы выполняете прочитанный, вы читаете от текущего положения до конца файла, который... ничего не содержит!
Можно открыть файл (позиция курсора 0), затем написать, что последовательность "Привет" (позиция курсора 6), и пытающийся читать от курсора заставит Руби говорить, "О, эй, больше нет содержания в этом файле прошлой позиции курсора 6" и просто не возвратит пустую строку.
Можно перемотать курсор файла с IO#rewind
, чтобы перезагрузить курсор к началу файла. Можно тогда прочитать файл (который будет читать от курсора до конца файла), обычно.
Обратите внимание, что, если вы выступаете, любой пишет после перемотки, вы перепишете свое ранее написанное содержание.
# Unpacks first argument to 'filename'
filename = ARGV.first
# Lets write try writing to a file
write_txt = File.new(filename, 'w+')
write_txt.write("OMG I wrote this file!\nHow cool is that?")
write_txt.rewind
puts write_txt.read()
Обратите внимание, однако, что это обычно считают плохой практикой, чтобы и читать от и написать тому же самому дескриптору файла. Вы обычно открывали бы один дескриптор файла для чтения и один для написания, поскольку у смешивания этих двух могут быть противные последствия (такие как случайное переписывание существующего содержания, перематывая курсор для прочитанного, и затем выполняя писание!)