ВП_Лекция5_C_Работа_с_файлами.ppt
- Количество слайдов: 30
Лекция 5. С/C++. Работа с файлами. Визуальное программирование. Ст. преп. М. А. Сокольская
План. 1. 2. 3. 4. 5. 6. 2 Виды файлов. Файловые переменные. Установка связи с файлом. Чтение из файла. Запись в файл. Закрытие файла. Дополнительные функции работы с файлами
Виды файлов Файл с С/С++ - это именованный объект, хранящий данные (программа или любая другая информация) на какомлибо носителе. Файл в С- это что угодно (файл, дисплей, принтер и т. д. ) Виды файлов: 1) текстовые – последовательность символов; 2) бинарные – последовательность байт, поддерживает позиционирование курсора файла, при чтении или записи в файл курсор смещается на 1 позицию. 3
4 Выполняя операцию открытия файла программист связывает конкретный файл с потоком. Поток – некоторое виртуальное логическое устройство, одинаковое для любого типа файлов. При закрытии файла его связь с потоком разрывается. Если файл был открыт для записи, его содержимое записывается на внешнее устройство
Файловая система С/С++ Файловая система языка С предназначена для работы с самыми разнообразными устройствами. Даже если какоето устройство сильно отличается от других, буферизованная файловая система все равно представит его в виде логического устройства (потока). Файловая система состоит из нескольких функций, для использования большинства из них необходим заголовочный файл stdio. h 5
Объявление файловой переменной 6 Первый шаг при работе с файлами – объявление файловой переменной Синтаксис: FILE *имя_файловой_переменной; Например: FILE *myfile; Файловая переменная – это звено, соединяющее все компоненты системы ввода-вывода, описывает конкретный файл и используется соответствующим потоком при выполнении операций ввода-вывода.
Открытие файла Осуществляется функцией: fopen (имя_файла, режим_открытия); Прототип функции: FILE *fopen (const char *имя_файла, const char *режим); Параметр имя_файла – строка, задающая допустимое имя файла и, при необходимости, путь к нему. Параметр режим определяет назначение файла. 7
Допустимые значения параметра режим Значение Смысл r w Открыть текстовый файл для записи a Добавить записи в конец текстового файла rb Открыть бинарный файл для чтения wb Открыть бинарный файл для записи ab 8 Открыть текстовый файл для чтения Добавить записи в конец бинарного файла r+ Открыть текстовый файл для чтения и записи
Значение Смысл w+ a+ Добавить записи в конец текстового файла или создать текстовый файл для чтения и записи r+b Открыть бинарный файл для чтения и записи w+b Открыть бинарный файл для чтения и записи a+b 9 Открыть текстовый файл для чтения и записи Добавить записи в конец текстового файла или создать текстовый файл для чтения и записи
Примеры. Открытие файла. #include <stdio. h> int main () { FILE *myfile; myfile = fopen (“output. txt”, “w”); return 0; } 10
Примеры. Проверка правильности открытия файла. 11 #include <stdio. h> int main () { FILE *myfile; if ((myfile = fopen (“output. txt”, “w”) == NULL) { printf(“Не могу открыть файл!n”); exit(1); } return 0; }
Запись в файл. Запись символов. Для записи символа в файл используется функция: putc (символ, файловая_переменная); Прототип функции: int putc (int символ, FILE *фп); putc (‘a’, myfile); /*запись в файл, связанный с файловой переменной myfile, символа а. */ 12
Запись в файл. Запись строк. Для записи строки в файл используется функция: fputs (строка, файловая_переменная); Прототип функции: int fputs (const char *строка, FILE *фп); Функция записывает в заданный определяемую параметром строка. поток строку, putc (“Привет”, myfile); /*запись в файл, связанный с файловой переменной myfile, строки «Привет» . */ 13
Запись в файл. Запись блоков данных любого типа. Для записи в файл блоков данных используется функция: fwrite (переменная, количество_байт, количество_блоков, файл_перем); Например: double d=3. 14; fwrite (&d, sizeof(double), 1, myfile); Запись в файл одного вещественного числа. 14
Запись в файл. Функция fprintf аналогична функции printf, но работает с файлами. fprintf (фп, управляющая строка, параметры); Например: fprintf (myfile, “%c %d”, ch, t); Запись в файл myfile значений переменных разных типов. 15 двух
Чтение из файла. Чтение символа. Для чтения символа из файла функция: getc (файловая_переменная); используется Прототип функции: int getc (FILE *фп); 16 char ch; ch = getc (myfile); /*чтение символа из файла, связанного с файловой переменной myfile*/
Чтение из файла. Чтение строки. Для записи строки в файл используется функция: fgets (строка, длина, файловая_переменная); Прототип функции: char *fgets (char *строка, int длина, FILE *фп); Функция читает из заданного потока строку, в параметр строка, пока не обнаружит символ перехода на другую строку или пока не прочитает длина-1 символ. 17 fgets (str 1, 50, myfile); /*чтение из файла, связанного с файловой переменной myfile, строки длиной 50 символов. */
Чтение из файла. Чтение блоков данных любого типа. Для чтения из файла блоков данных используется функция: fread (переменная, количество_байт, количество_блоков, файл_перем); Например: double d; fread (&d, sizeof(double), 1, myfile); Чтение из файла одного вещественного числа. 18
Запись в файл. Функция fscanf аналогична функции scanf, но работает с файлами. fscanf (фп, управляющая строка, параметры); Например: fscanf (myfile, “%c %d”, ch, &t); Чтение из файла myfile значений двух переменных разных типов. 19
Закрытие файла Для закрытия потока, открытого функцией fopen используется функция fclose (файловая_переменная); Функция - записывает все данные, оставшиеся в потоке в файл и закрывает его; - освобождает управляющий блок файла, связанного с потоком, позволяя использовать его повторно. Например: 20 fclose (myfile);
Дополнительные функции работы с файлами. Функция feof. 21 Для однозначного определения достигнут или нет конец файла в С предусмотрена функция eof. Прототип функции: int eof (FILE *файловая_переменная); Обнаружив конец файла функция возвращает истинное значение, в противном случае – 0. Чтение из файла, пока не найден конец файла, может быть организовано следующим образом: while (! feof (myfile)) ch = getc (myfile);
Пример. Копирование содержимого файла в другой файл 22 #include<stdio. h> #include<stdlib. h> int main() { FILE *in, *out; char ch; if ((in = fopen (“C: input. txt”, “rb”))==NULL) { printf (“Не могу открыть файл!n”); exit(1); }
if ((out = fopen (“C: output. txt”, “wb”))==NULL) { printf (“Не могу открыть файл!n”); exit(1); } //копируем файл 23
while (!feof(in)) { ch = getc(in); if (!feof(in)) putc (ch, out); } fclose (in); fclose (out); return 0; } 24
Дополнительные функции работы с файлами. 25 Функция rewind устанавливает курсор в начало файла ( «перематывает» файл в начало). Прототип: void rewind(FILE *файловая_переменная); Функция ferror определяет, возникла ли ошибка при работе с файлом. Прототип: int ferror (FILE * файловая_переменная); Функция возвращает истину, если при выполнении операции возникла ошибка, и ложь в противном случае.
Дополнительные функции работы с файлами. Функция remove удаляет указанный файл. Прототип: int remove(const char *имя_файла); Если функция выполнена успешно, то она возвращает 0, иначе – ненулевое значение. Например: remove (“C: myf. txt”); 26
Дополнительные функции работы с файлами. Функция fseek 27 Функция fseek устанавливает курсов файла в заданную позицию. Используется с файлами, допускающими произвольный доступ (бинарными). Прототип: int fseek (FILE *фп, long int смещение, int начало); фп – файловая переменная Смещение – количество байт, на которое надо переместить курсор. Начало – параметр, задающий точку начала перемещения: SEEK_SET, SEEK_CUR, SEEK_END.
Функция fseek Функция возвращает 0, если смещение выполнено успешно и ненулевое значение при неудаче. Пример. Перемещение курсора в заданную позицию и отображение байта, записанного в этом месте. #include<stdio. h> #include<stdlib. h> int main() { FILE *myfile; 28
29 if ((myfile=fopen(“C: output. dat”, “rb”)) == NULL) { printf(“Не могу открыть файл!n”); exit(1); } if (fseek(myfile), atol(“C: output. dat”), SEEK_SET)) { printf (“Ошибка. n”); exit (1); }
printf(“В позиции %ld записан символ %c. n”, atol(“C: output. dat”), getc (myfile)); fclose(myfile); return 0; } 30
ВП_Лекция5_C_Работа_с_файлами.ppt