Пятница, 2025-06-20, 9:51 PM
Приветствую Вас Гость | RSS
Главная | Бинарные файлы в С++ | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Бинарные файлы c++ | Работа с бинарными файлами в с++

     

    Сегодня мы рассмотрим работу с бинарными файлами в языке Си

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

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

     

    Для получения доступа к бинарному файлу(потоку) в MVS нужно:

    1. Создать поток соответствующего типа:

    ifstream- для ввода из файла ;

    ofstream- для вывода в файл;

    fstream   - для обмена с файлом в двух направлениях.

     

    1. Связать его с файлом данных и открыть (open) для работы в определенном режиме, с обязательным указанием двоичного режима ios::binary(по умолчанию потоки открываются в текстовом режиме):

    void ifstream::open(const char *имя_файла, openmode режим=ios::in|ios::binary);

    void ofstream::open(const char *имя_файла,
    openmode режим=ios::out|ios::trunс|ios::binary);

    void fstream::open(const char *имя_файла,
    openmode режим=ios::in|ios::out|ios::binary);

     

    где имя_файла – имя файла, в которое может входить спецификатор пути;

    режим – задает режим открытия файла (см. лаб. раб. №10).

    1. Обмен данными с файлом через поток: запись в поток; чтение из потока; управление состоянием потока.

     

    Для записи в поток в C++ используется метод write:

    basic_ostream<_Elem, _Tr>& write( const char_type *_Str, streamsize _Count );

     

    Для чтения из потока используется метод read:

    basic_istream<_Elem, _Tr>& read( const char_type *_Str, streamsize _Count );

    _Countчисло выводимых (вводимых) в поток байт

    _Strсимволы выводимые(вводимые) в (из) поток(а)

     

    Произвольный доступ к файлу осуществляется путем установки текущей позиции в файле с помощью методов:

    для потоков открытых на ввод:

    basic_istream<_Elem, _Tr>& seekg( pos_type _Pos );

    basic_istream<_Elem, _Tr>& seekg( off_type _Off, ios_base::seekdir _Way );

     

    для потоков открытых на вывод в C++ пишется так:

    basic_ostream<_Elem, _Tr>& seekp( pos_type _Pos );

    basic_ostream<_Elem, _Tr>& seekp( off_type _Off, ios_base::seekdir _Way );

     

    _Posпозиция в потоке для чтения (номер байта)

    _Off  позиция относительно _Way.

    _Wayодно из перечислений ios_base  (beg, cur, end):

    перечисление

    описание

    ios_base::beg

    начало файла

    ios_base::end

    конец файла

    ios_base::cur

    текущая позиция

     

    Например:

    ofstream fout(“my.dat”,ios::ate|ios::binary);

    //устанавливаем указатель на начало потока

    fout.seekp(0);

    fout.write((char *) &el,sizeof el);

     

    ifstream fin(“my.dat”,ios::ate|ios::binary);

    //передвигаем указатель на 10 байт перед концом потока

    fin.seekg(-10, ios_base::end);

    fin.read((char *) &el,sizeof el);

     

    В языке Си с помощью функции booleof(); можно определить, был ли достигнут конец файла ввода.

    1. Для закрытия потока используется функция close().
    uCozCopyright MyCorp © 2025