C++ для начинающих работа с бинарными файлами

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Код C++ Записать число в бинарный файл. Прочитать число из бинарного файла

Уверен, что кого-то могут смутить страшные строчки этого небольшого кода. Не беспокойтесь, он не так страшен, каким может казаться.

Для записи в файл использован класс ofstream, для чтения из файла использован класс ifstream

  • ifstream — класс, функции которого используются для чтения файлов
  • ofstream — класс, функции которого используются для записи файлов

Название класса эквивалентно типу переменной, поэтому после названия класса объявляется объект, тип которого будет соответствовать классу.
out — Объект, тип которого есть класс для записи файлов (В коде: ofstream out).
in — Объект, тип которого есть класс для чтения файлов (В коде: ifstream in)
out и in могут быть названы произвольно, а вот ifstream и ofstream аналогично типам данных, как попало не назовешь.
Чтобы созданные объекты сработали, нужно им передать параметры. Первый параметр — путь к файлу, второй параметр — способ обработки файла (способы разные бывают)
Если вы присмотритесь к тому, что внутри скобок, то заметите во время записи в файл и во время чтения из файла там изменилась только одна переменная, над которой проводится действие. (изменился передаваемый в класс объект)
Во время записи в файл, мы записывали в файл значение y и вот этот самый y стоит в первом случае.
Во время чтения информации, мы считывали информацию в x и вот этот самый x стоит во втором случае.
Про режимы открытия файлов можно почитать тут http://ci-plus-plus-snachala.ru/?p=84
Пример работы с текстовым файлом можно почитать тут http://ci-plus-plus-snachala.ru/?p=17

Возможно вы уже читали, возможно вам говорили, возможно вы вообще не знали, но когда приходится записывать структуру или класс в файл, то внутри структуры может быть очень много информационных полей и при записи структуры в файл в текстовом режиме придется записывать каждый элемент структуры, а это отнимет много времени. Вот при записи структуры в бинарный файл можно записать всю структуру целиком и сразу.

Код C++ Запись объекта структуры в бинарный файл. Чтение объекта структуры из бинарного файла

Если посмотреть на первый пример, где записывалось число и этот, где структура, то при записи файла и чтения файла легко увидеть однообразие. Так вот и получается, что в бинарный файл можно записать любой объект такой короткой инструкцией.

Для тех кому интересен пример записи класса в бинарный файл и чтение класса из бинарного файла, то вот. Я думаю, что тех кого эта часть интересует уже должны быть знакомы с классами. Я выкладывал немного материала, но это намного дальше чем расположена эта тема.

Код C++ Запись объекта класса в бинарный файл. Чтение объекта класса из бинарного файла

======================================================
out.write((char*)&X,sizeof X); //Записываем объект X в открытый нами файл
Узнаем адрес объекта X и приводим объект Х к однобайтовому типу
=======================================================
in.read((char*)&Y,sizeof Y); //Считываем информацию в объект Y
Узнаем адрес объекта Y и кладем в объект Y каждый новый прочитанный байт.
Инструктируем, что нам в объект Y нужно положить sizeof Y байт

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

11 комментариев: C++ для начинающих работа с бинарными файлами

  • Юрий говорит:

    не работает код в Visual studio. начиная с объявления заголовочных файлов

    • admin говорит:

      Для Visual Studio первые три строчки такие

      =========

  • Дмитрий говорит:

    Чушь! Не работает. Записывается не строка в файл а указатель.

  • Татьяна говорит:

    Смущают не строчки, а текст после кода.
    iostream, ifstream — это не команды, это конструкторы. А вот после того как с их помощью сконструировали файловые объекты, вот тогды используются методы — члены класса: для чтения read, для записи write

    • admin говорит:

      Правильнее сказать: «классы».(не конструкторы)
      вы же не можете вызвать конструктор класса в самостоятельном виде.
      Я исправлю. Спасибо, что показали.

  • Татьяна говорит:

    Да, классы, но в таком написании вызываются конструкторы файловых объектов (неявно). И уж точно никакие н команды. Для С++ это вообще какой-то странный термин.

    • admin говорит:

      я уже исправил.
      надеюсь лучше стало.
      и я не знаю чем вам не нравится термин: «команда».
      В конкретном месте, я действительно неправильно его применил и, благодаря вам, исправил, но
      Команда — это элементарное действие, операция, выполняемые вычислительным устройством
      т.е. написали a+b, написали команду сложения, использовали оператор сложения.
      написали ifstream — использовали команду создания класса для описания объекта.
      русский язык велик и могуч и то, что другие языки не могут так широко использоваться означает, что совсем не обязательно кто-то там ошибается, если использует фразеологию не по книжному варианту.

  • Шлюпка говорит:

    ifstream in(«C://1.txt»,ios::binary|ios::in); //Открыли для только для чтения в бинарном режиме

    Два слова «для», исправьте.

  • Дмитро говорит:

    Спасибі величезне!

    термин: «команда» це дійсно негарно. Він плутає і ріже слух (зір0!

    Конструктор відразу пояснює суть справи — і це саме те що треба

  • Дмитро говорит:

    Тобто ж клас — рівно зрозуміло!

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- У меня компьютер сам выключается... че делать? - У тебя системник внизу стоит? - Да. - Поменяй носки... он сознание теряет.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок