вторник, 13 мая 2008 г.

Ruby: reading binary files

Столкнулся с неожиданным в ruby.

Обычно, чтобы прочитать файл достаточно написать:
content = File.open("filename").read

но оказывется это хорошо работает только если файл текстовый. Если же файл бинарный, то он может прочитаться не полностью, видимо встречается какой-то символ который воспринимается как конец файла (какой именно еще не выяснил).

Пример:

File.size("c:\\bg.png") # => 15096
File.open("c:\\bg.png").read.length # => 4002

Чтобы прочитать такой файл правильно надо использовать binmode

File.open("c:\\bg.png").binmode.read.length # => 15096