Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_IGA.docx
Скачиваний:
29
Добавлен:
25.09.2019
Размер:
5.47 Mб
Скачать

117. Организация работы с файлами из программы (стандартные функции обработки файлов).

Работа с файлами складывается из трех шагов.

1. Файл открывается. Это означает, что программа "захватывает" заданный по имени файл, сообщает Windows, что далее она будет с ним работать.

2. Ведется работа с файлом. Из него данные либо считываются, либо в него записываются.

3. Файл закрывается. После этой операции он снова доступен другим программам для обработки.

Стандартные операции работы с файлами, существующие практически во всех реализациях Си, хранятся в библиотеке stdio.h. Функция открытия файла называется fopen().

Параметров у функции fopen() два. Первый -- это путь к файлу (строка), второй -- параметры открытия файла.

Тогда команда открытия (создания пустого) файла запишется так:

FILE * fo;

fo = fopen("test.txt","wt");

Можно задать и полный путь к файлу, например:

fo = fopen("c:\\tmp\\test.txt","wt");

Закрывается файл с помощью функции fclose()

Запись текстовой строки в файл выполняет функция fprintf()

fprintf( fo, "Привет!" );

Чтобы вывести значение некоторой переменной, надо использовать элемент формата, который начинается с символа % . Так, формат %d задает вывод целочисленного значения, формат %s - вывод строки.

Например:

int n = 10;

charstr[20] = "значение переменной n равно ";

fprintf(fo, "Вывод: %s %d", str, n );

Комбинация символов "\n" в конце строки формата означает перевод на новую строку в выводимых текстовых данных.

Для ввода данных (текстовой строки) используют функцию fscanf(). Она напоминает fprintf()

Операция &, примененная к имени переменной, возвращает адрес этой переменной в памяти. Тогда операцию ввода числа из текстового файла fi в целочисленную переменную n можно записать так:

fscanf( fi, "%d", &n );

  1. Ввод и вывод данных из файла (матрица и массив).

Язык программирования Си поддерживает множество функций стандартных библиотек для файлового ввода и вывода. Эти функции составляют основу заголовочного файла стандартной библиотеки языка Си <stdio.h>.

Функциональность ввода-вывода языка Си по текущим стандартам реализуется на низком уровне. Язык Си абстрагирует все файловые операции, превращая их в операции с потоками байтов, которые могут быть как «потоками ввода», так и «потоками вывода». В отличие от некоторых ранних языков программирования, язык Си не имеет прямой поддержки произвольного доступа к файлам данных; чтобы считать записанную информацию в середине файла, программисту приходится создавать поток, ищущий в середине файла, а затем последовательно считывать байты из потока.

Открытие файла при помощи fopen. Файл открывается при помощи fopen, которая возвращает информацию потока ввода-вывода, прикрепленного к указанному файлу или другому устройству, с которого идет чтение (или в который идет запись). В случае неудачи функция возвращает нулевой указатель.

Схожая функция freopen библиотеки Си выполняет аналогичную операцию после первого закрытия любого открытого потока, связанного с ее параметрами.

Стандарт языка Си описывает два вида файлов — текстовые и двоичные — хотя операционная система не требует их различать. Текстовый файл — файл, содержащий текст, разбитый на строки при помощи некоторого разделяющего символа окончания строки или последовательности. При считывании байтов из текстового файла, символы конца строки обычно связываются (заменяются) с переводом строки для упрощения обработки. При записи текстового файла одиночный символ перевода строки перед записью связывается (заменяется) со специфичной для ОС последовательностью символов конца строки. Двоичный файл — файл, из которого байты считываются и выводятся в «сыром» виде без какого-либо связывания (подстановки).

Закрытие файла при помощи fclose

Функция fclose принимает один аргумент: указатель на структуру FILE потока для закрытия.

intfclose(FILE *fp);

Функция возвращает нуль в случае успеха и EOF в случае неудачи. При нормальном завершении программы функция вызывается автоматически для каждого открытого файла.

Чтение из файла

Функция fgetc применяется для чтения символа из потока.

intfgetc(FILE *fp);

В случае успеха, fgetc возвращает следующий байт или символ из потока (зависит от того, файл «двоичный» или «текстовый» (как выше обсуждалось). В противном случае, fgetc возвращает EOF.

Запись в файл

Функция fwrite записывает блок данных в поток.

intfwrite ( const char * array, size_t size, size_t count, FILE * stream );

Таким образом запишется массив элементов count в текущую позицию в потоке. Для каждого элемента запишется size байт. Индикатор позиции в потоке изменится на число байт, записанныхуспешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.

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