Попробую свою версию :
Файл может быть открыт как текстовый или как двоичный Для текстовых файлов
Цитата:
Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output.
Т е на вводе последовательность возврата каретки/перевода строки преобразуется в символ '\n'. На выводе символ '\n' преобразуется в последовательность возврат каретки/перевод строки
В двоичном (бинарном) режиме такие преобразования не выполняются.
Может быть в этом причина
Плюс может быть такой момент, если файл открыть на разных платформах
на винде разделитель \r\n
на юнихе \n (вроде бы так )