- •Теория
- •Структуры
- •Объединение
- •Файлы
- •Определения
- •Объявление файлов:
- •Смещение
- •Определение размера файла:
- •Чтение и запись данных в файл
- •JAVA
- •Типы переменных
- •Объявление переменных
- •Объявление массивов
- •Классы, поля, методы
- •Квалификаторы доступа к полям и методам класса
- •Конструктор
- •Класс Scanner
- •Наследование
- •Исключения
- •Отслеживаемые исключения
- •Неотслеживаемые исключения
- •Практика
- •Практика
- •Задание 1
- •Задание 2
- •Задание 3
- •Задание 4
- •Задание 5
- •Задание 6
Файлы
Определения
Файл - именованная область данных на носителе. Файлы бывают бинарные и текстовые.
Текстовые файлы – файлы, которые могут быть восприняты человеком
Абсолютный путь – путь, по которому файл однозначно идентифицируется.
Относительный путь – идентифицирует файл относительно какой-либо директории.
fopen – функция для открытия или создания файла. В случае неудачи вызывает нулевой указатель. В случае успешного открытия или создания файла, возвращается указатель на дескриптор файла.
Объявление файлов:
FILE* fopen(const char* FilePath,const char* Mode);
FilePath – путь к файлу; Mode – режим. При ошибке возвращает NULL, в случае успеха – указатель на дескриптор файла
Режимы:
1) a (append) – файл открывается для дополнения данных в конец. Если файл не существует, то он будет создан. Разрешена только запись
2) a+ (append + read) – отличается тем, что разрешена не только запись, но и чтение.
3) r (read) – предназначен для открытия файла только для чтения. Файл должен существовать,
иначе функция вернет нулевой указатель.
4) r+ (read + write) - отличается от предыдущего наличием права на запись. Файл должен
существовать.
5) w (write) – предназначен для записи данных в файл. Если файл не существует, то будет создан. Если существует, то будет перезаписан.
6) w+ (write + read) – появляется право на чтение
Если в любом из режимов приписать с конца b (binary), то файл будет открыт или создан бинарно.
Перезапись файла – удаление всех данных из него с последующим обнулением размера файла.
Расширение файла не влияет на то, в каком режиме будет открыт файл.
fclose – закрытие файла
int fclose (FILE* File); /*0 - в случае успеха*/
Бинарный файл имеет определенный формат. Применяется набор правил, в соответствии с которыми структурированы данные в бинарном файле.
Смещение
int fseek( FILE* f, long int offset, int Mode);
f – дескриптор файла; offset – новое смещение в файле; Mode – режим смещения.
В случае ошибки возвращает “-1”, при успешном выполнении возвращает отличное от “-1”.
Режимы смещения:
SEEK_SET – смещение относительно начала файла;
SEEK_CUR – смещение относительно текущего смещения;
SEEK_END – смещение относительно конца файла.
fseek64 – работа с большими файлами. “0” – успешное завершение, не “0” – в случае ошибки.
Функция для получения текущего смещения относительно начала:
long int ftell(FILE* f); /*ошибка - "-1"*/
Имеет ограничение на работу с большими файлами.
Определение размера файла:
Поставить каретку в конец файла; Вызвать функцию ftell; Ее смещение == размер в Байтах.
Чтение и запись данных в файл
Функция для записи данных в файл:
int fprintf(FILE* f, const char* Spec,...);
Возвращает количество успешно записанных символов в файл, в случае ошибки – число меньше
нуля.
Функция для чтения данных из файла:
int fscanf(FILE* f, const char* Spec,...);
Возвращает количество спецификаторов.
Функция для записи данных в бинарный файл
size_t fwrite(const void* Buffer, size_t ElementSize,size_t ElementsNumber,FILE* f)
Возвращает количество успешно записанных элементов (равно третьему аргументу)
Buffer – буфер с данными; ElementSize – размер элементов; ElementsNumber – количество
элементов; FILE* f – дескриптор файла.
Функция чтения данных из бинарного файла
size_t fread(void* Buffer, size_t ElementSize, size_t ElementsNumber, FILE* f)
В случае успеха возвращает значение численно равное третьему аргументу. Небезопасна
Buffer – указатель на буфер, в который считываются данные; ElementSize – размер элемента;
ElementsNumber – количество элементов; FILE* f – дескриптор файла.
int feof(FILE *f);
Позволяет достичь конца файла. Возвращает ненулевое значение, если конец был достигнут.
int ferror(FILE* f);
Проверяет на ошибки. Возвращает ненулевое значение, если предыдущая операция завершилась ошибкой.
int fgetc(FILE* f);
Чтение одного байта по текущему смещению (применима и к бинарным). В случае ошибки возвращает EOF.
char* fgets(char* s, size_t MaxLen, FILE* f);
Чтение строки из текстового файла. Возвращает значение первого аргумента, при ошибке
возвращает NULL
s – указатель на массив, в который считывается строка из текстового файла; MaxLen –
максимальное количество символов в массиве, включая терминальный ноль, FILE* f – дескриптор
файла.
