Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП ист 22 ответы.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
151.85 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]