
- •4. Инкремент и декремент
- •5. Операции сравнения (операции отношения)
- •7. Ввод- вывод
- •10. Оператор цикла с постусловием do-while
- •13. Работа с символами
- •15. Указатели и Массивы.
- •16. Некоторые функции из библиотеки string.H
- •17. Перечисления (enum)
- •19. Функции
- •20. Передача данных в функцию по значению, по указателю, по ссылке.
- •21. Передача массивов в функцию. Указатель на функцию
- •22. Встраиваемые функции. Перегрузка функций. Передача массивов в функцию. Указатель на функцию
- •23. Параметры функций по умолчанию, функции с переменным числом параметров.
- •25. Работа с файлами
- •26. Директивы препроцессора
- •27. Базовые принципы объектно-ориентированного программирования
- •29. Базовые блоки ооп. Объект. Класс
- •30. Реализация механизма сокрытия информации
25. Работа с файлами
Файлы в C++
Файлом называют способ хранения информации на физическом устройстве. Файл — это понятие, которое применимо ко всему — от файла на диске до терминала.
В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.
Текстовый поток — это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).
Двоичный поток — это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.
Организация работы с файлами средствами C
Объявление файла
FILE *идентификатор;
Пример
FILE *f;
Открытие файла: fopen(имя физического файла, режим доступа)
Режим доступа — строка, указывающая режим открытия файла файла и тип файла
Типы файла: бинарный (b); текстовый (t)
Например
f = fopen(s, "wb");
k = fopen("h:\ex.dat", "rb");
Неформатированные файловый ввод-вывод
Запись в файл
fwrite(адрес записываемой величины, размер одного экземпляра, количество записываемых величин, имя логического файла);
Например,
fwrite(&dat, sizeof(int), 1, f);
Чтение из файла
fread(адрес величины, размер одного экземпляра, количество считываемых величин, имя логического файла);
Например,
fread(&dat, sizeof(int), 1, f);
Закрытие файла
fclose(имя логического файла);
26. Директивы препроцессора
По сравнению с другими языками программирования в языке C есть принципиально новое понятие – препроцессор, позволяющий облегчить написание и отладку C-программ.
Препроцессор – программа, используемая для обработки исходного текста программы на языке С до компиляции и выполняющая следующие действия:
поиск и включение в программу нужных внешних файлов; изменение условий компиляции; определение значений констант и т. д. Директива include
Директива включает в текст программы содержимое указанного файла и имеет две формы:
#include"имя файла"
#include <имя файла>
Имя файла должно соответствовать соглашениям операционной системы и может состоять только из имени файла, либо из имени файла с указанием пути к этому файлу. Способ поиска файла зависит от того, заключено ли его имя в двойные кавычки или в угловые скобки. Если имя файла задано в угловых скобках, поиск файла проводится в специальном каталоге. Обычно таким каталогом является каталог INCLUDE интегрированной среды разработки (IDE). Если имя файла указано в кавычках, то поиск файла начинается с текущего каталога, а если файл не найден, поиск продолжается в каталоге INCLUDE.
Директива include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на С начинаются с этой директивы.
Заголовочный файл (объект-заголовок) снабжает компилятор необходимой информацией о данных и функциях, которые могут использоваться в программе, имеет расширение .h (header) и представляет собой текстовый файл. Заголовочный файл может содержать определение типов, прототипы функций, объявление внешних переменных (extern), директивы препроцессора и комментарии.
Любая C-программа должна содержать хотя бы одну директиву. Так, для реализации ввода/вывода должна присутствовать директива:
#include <stdio.h>
Файл stdio.h (standard input/output header) содержит необходимую информацию о средствах ввода/вывода информации:
определение типа данных FILE (поток ввода/вывода идентифицируется указателем на переменную типа FILE); описание потоков stdin и stdout (ввод/вывод); по умолчанию эти файлы связаны с терминальным оборудованием (ввод с клавиатуры, вывод на дисплей); файл вывода сообщений об ошибкахstderr; определение макроса NULL (нулевой указатель, т. е. значение, не указывающее ни на какой объект); определение макроса EOF (признак конца файла).
Для реализации других действий в программу с помощью данной директивы следует включать иные заголовочные файлы, например:
преобразование строк #include <string.h> работа с математическими функциями #include <math.h> библиотечные функции #include <stdlib.h>
Директива define
Директива define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами - макросами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными или символическими константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями, причем макроопределения могут иметь аргументы.
Директива define имеет две синтаксические формы:
#define идентификатор текст
#define идентификатор (список параметров) текст
Эта директива заменяет все последующие вхождения идентификатора текстом. Такой процесс называется макроподстановкой. Текст может представлять собой любой фрагмент программы на C, а может и отсутствовать вовсе. В последнем случае все экземпляры идентификатора удаляются из программы.
Идентификатор (макрос) в директиве define принято записывать прописными буквами:
#define WIDTH 80
#define LENGTH (WIDTH+10)
Эти директивы изменят в тексте программы каждое слово WIDTH на число 80, а каждое слово LENGTH на выражение (80+10) вместе с окружающими его скобками.
Скобки, содержащиеся в макроопределении, позволяют избежать недоразумений, связанных с порядком выполнения операций. Так, при отсутствии скобок выражение t=LENGTH*7 будет преобразовано в выражение t=80+1