Двоичные (бинарные) файлы не являются форматируемыми. Они не разбиваются на строки, никаких преобразований при обмене не выполняется, поэтому операции обмена выполняются быстрее. Пример двоичного файла – исполняемый файл с расширением exe. При операции записи в двоичный файл попадает ровно столько байтов, сколько записываемый объект занимает в памяти (например, для целого числа – sizeof (int) байтов). В случае, если двоичный файл есть последовательность однотипных элементов, с ним можно работать и как с файлом последовательного доступа, и как с файлом прямого доступа, в котором возможен непосредственный доступ к любому из его элементов.
Хотя текстовые файлы полезны во многих случаях и содержат удобный для восприятия человека текст, у них нет гибкости неформатированных двоичных файлов, содержащих исходные двоичные данные во внутреннем представлении, непосредственно используемом программой. О неформатированном вводе-выводе иногда говорят как о «сыром» вводе-выводе или вводе-выводе «низкого» уровня.
При работе с файлами необходимо знать:
¨ текстовые файлы могут создаваться с помощью тестового редактора и содержать данные разных типов;
¨ элементы двоичных файлов хранятся во внутреннем представлении и поэтому должны создаваться программно;
¨ двоичные файлы также могут содержать элементы разных типов, но для большей надежности их следует формировать из элементов только определенного типа;
¨ даже для последовательной обработки однотипных данных двоичный файл предпочтительнее текстового как в отношении надежности, так и в отношении экономичности (скорости выполнения операций);
¨ благодаря возможности прямого доступа к своим элементам двоичные файлы представляются очень привлекательными при чередовании операций чтения и записи данных.
Программа на С++ имеет дело с абстрактным потоком, представленным в программе обычной переменной. Эта переменная имеет область видимости и время жизни в соответствии с описанием и не имеет никакого отношения к файлам на диске. Чтобы иметь возможность работать с файлом, необходимо как-то связать с ним переменную-поток. Обычно эта связь задается либо при открытии файла, либо при создании потока.
При закрытии файла связь разрывается (т.е. разрывается связь только переменной-потока с внешним файлом, сама переменная продолжает «жить» в соответствии с описанием и может быть снова связана с тем же или с другим файлом). При закрытии файла буфер освобождается – выводится в файл на внешнее устройство. Если программа заканчивается аварийно, файлы остаются незакрытыми, и последняя порция информации на диск не попадает.
Рассматривая взаимосвязь файлов с потоками ввода-вывода, нужно отметить существование следующих процедур:
1 – создание файла; // файл на диске представлен именем и не имеет отношения к потоку
2 – создание потока; //определение переменной потокового типа
3 – открытие файла; //явно, методом open(), неявно конструктором при создании потока
4 – открытие потока //неявно конструктором при создании потока
5 – «присоединение» файла к потоку; //связь устанавливается при открытии файла
6 – обмен с файлом с помощью потока; //по умолчанию форматируемый поток и соотносится // с текстовым файлом на диске
7 – «отсоединение» потока от файла; //при закрытии файла связь разрывается, //переменная – продолжает жить
8 – закрытие файла; //явно, методом close(), неявно деструктором при завершении программы
9 – уничтожение потока.
может быть выполнено с помощью библиотечной функцииcreat():
int creat (const char *path, int amode); // заголовочный файл io.h
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.