1. Расширение файла не играет роли, оно используется для упрощения упорядочивания файлов и их открытия соответсвующим софтом 2. Все файлы можно читать и записывать в "бинарном" виде 3. Текстовый режим открытия заточен для работы с (внезапно) текстовыми файлами. Так тебе не надо будет держать в голове что символ разрыва строки может быть два байта и при проходе по содержимому он будет длиной в ожидаемый один байт.
В двух словах Чтобы шла запись без форматирования, надо использовать метод write, так как operator<< приводит нас к принудительному форматированию данных в текстовый вид