Файлы. Чтение одного элемента из файла, обработка и запись результата в текстовый файл

Страницы работы

Фрагмент текста работы

  • Поток позволяет ассоциировать файл с буфером, который позволяет осуществить эффективный ввод - вывод. Буфер – это выделенный участок памяти. При буферном вводе информация с носителя информации (из файла) вначале поступает в буфер, а затем оттуда передается прикладной программе. Аналогично и при буферном выводе – информация из программы вначале поступает в буфер, а затем – на носитель информации (в файл).
  • Если для ввода и вывода в программе используются потоки, то для программиста буферизация выполняется автоматически.
  • В С (С++) различают два вида файлов : текстовые и двоичные (бинарные).
  • Текстовые файлы состоят из строк символов и предназначены для чтения человеком. На диске текстовые файлы хранятся в виде сплошной последовательности символов, и их деление на строки становится заметным лишь в момент вывода на экран или на печать, так как именно при выводе управляющие символы (например, \n) начинают выполнять свои функции.
  • Бинарный файл – это последовательность байтов, однозначно соответствующая последовательности байтов, записанной на внешнем устройстве.
  • Основными действиями, производимыми над файлами, являются их открытие, обработка и закрытие.

Файлы (С)

Файлы (С )

  • Основные функции для работы с файлами (stdio.h) :

Файлы (С )

  • Синтаксис объявления указателя на поток:
    • #include <stdio.h>
    • FILE * имя указателя;
  • Прототип функции fopen():
  • FILE * fopen(const char *имя_файла, const char *режим_доступа)
  • Режимы доступа к файлам:

Файлы (С )

  • Для управления потоками используются указатели.
  • В языке С указатель на поток является указателем на тип с именем FILE.
  • Тип FILE определяется в заголовочном файле stdio.h и представляет собой структуру, описывающую параметры реализации потока, такие, например, как адрес буфера, с которым будет работать файл, адрес текущего символа, который будет передаваться (приниматься) в прикладную программу, и т. д..
  • При открытии файлов порция информации из дискового файла поступает в буфер и указатель на поток получает адрес буфера.
  • В языке С файлы открываю с помощью функции fopen(). Функция fopen() имеет два параметра. Первый параметра является строковой константой, которая задает имя файла и путь к нему. Второй параметр – тоже строковая константа – задает режим доступа к файлу. Режим доступа описывает две составляющие: способ доступа (чтение или запись) и тип файла (текстовый или двоичный).
  • Для работы с текстовым файлом можно к режиму доступа добавить строчную латинскую букву t, но делать это не обязательно, так как файлы открываются в текстовом виде по умолчанию.
  • Для работы с бинарными файлами обязательно нужно к режиму доступа добавить строчную латинскую букву b.

Файлы (С )

  • Варианты открытия файла:
  • Вариант 1: #include <stdio.h>
  • FILE *f;
  • f = fopen("D:\\text.txt", "r");
  • { // обработка файла
  • }
  • Вариант 2: #include <stdio.h>
  • FILE *f;
  • if((f = fopen("D:\\text.txt", "r"))!=NULL)
  • { // обработка файла
  • }
  • Прототип функции fclose():
  • int fclose(FILE * f)

Файлы (С )

  • Таким образом, чтобы открыть файл (например, текстовый файл) для чтения, нужно произвести следующие действия :
    • Объявить указатель на поток;
    • Открыть файл функцией fopen() (т.е. связать указатель на поток с дисковым файлом и указать режим доступа r).
  • При попытке открыть существующий файл можно допустить ошибку в его имени или в указании пути к нужному файлу. Это вызывает ошибку выполнения программы. Следует предвидеть подобные ситуации и проводить проверку возможности открытия файла. Такую проверку осуществить довольно легко, так как функция fopen() возвращает значение указателя на поток в случае его успешного открытия и значение NULL (нулевой указатель), если доступ к файлу невозможен .
  • Файлы, открываемые в режиме записи, также нуждаются в аналогичной проверке.
  • Функция fclose() закрывает поток, открытый ранее функцией fopen(). Она записывает все оставшиеся в буфере данные в файл и закрывает его, используя команды операционной системы. Ошибка, возникшая при закрытии файла, может породить множество проблем, начиная с потери данных и разрушения файлов и заканчивая непредсказуемыми последствиями для программы. Кроме того, функция fclose() освобождает управляющий блок файла, связанного с потоком, позволяя использовать этот блок повторно.
  • Операционная система ограничивает количество одновременно открытых файлов, поэтому, прежде чем открыть один файл, следует закрыть другой.
  • Параметр f представляет собой указатель файла, возвращенный функцией

Похожие материалы

Информация о работе