Это в основном вопрос среды, в которой вы работаете. Средам разрешается изменять данные при определенных обстоятельствах в недвоичном режиме и даже в двоичном режиме (хотя и в гораздо более ограниченном режиме).
В стандарте C есть это, чтобы сказать о двух типах, от C99 7.19.2 Streams
(мой жирный):
2 / Текстовый поток - это упорядоченная последовательность символов, состоящая из строк, каждая строка
состоящий из нуля или более символов плюс завершающий символ новой строки. Будь то
последняя строка требует, чтобы завершающий символ новой строки определялся реализацией.
Возможно, символы должны быть добавлены, изменены или удалены при вводе и выводе, чтобы соответствовать различным соглашениям для представления текста в среде хоста. Таким образом, не требуется взаимно однозначного соответствия между символами в потоке и внешними символами.
представление.
Данные, считанные из текстового потока, обязательно будут сравниваться с данными
ранее записанные в этот поток только если: данные состоят только из печати
символы и управляющие символы горизонтальной табуляции и новой строки; нет символа новой строки
непосредственно предшествуют пробелы; и последний символ - символ новой строки.
Будь то пробел, который выписан непосредственно перед символом новой строки
появляется при чтении в зависимости от реализации.
3 / Бинарный поток - это упорядоченная последовательность символов, которая может прозрачно записывать
внутренние данные. Данные, считанные из двоичного потока, должны сравниваться равными данным, которые были
ранее записанный в этот поток, под той же реализацией. Такой поток может,
однако, к концу добавьте определенное для реализации число нулевых символов
потока.
Так что, по сути, если вы хотите максимально увеличить вероятность того, что ваши данные не будут изменены, используйте двоичный режим. Если вы следуете правилам для текстового режима, вы можете использовать это без страха.