Лабораторная работа №7 Файлы в языке С. Цель работы: Изучить способы создания и работы с файлами в языке С - файл

скачать (167.8 kb.)



Лабораторная работа №7

Файлы в языке С.

Цель работы:

Изучить способы создания и работы с файлами в языке С.

Краткие теоретические сведения.

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.

Прежде, чем работать с файлом его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д.

В алгоритмическом языке «С» это делает функция fopen. Она связывает физический файл на носителе, например B:\LR7.CPP, с логическим именем в программе. Логическое имя – это указатель на файл, т.е. на область памяти, где храниться информация о файле. Указатели на файлы необходимо объявлять. Формат объявления такого указателя следующий:

FILE *указатель на файл;

Например.

FILE *f;

f=fopen ("B:\LR7.СPP", "w");

Символ "w" определяет право доступа к открываемому файлу. В данном случае открывается файл LR7.СPP на диске B:\ только для чтения.

В «С» используются следующие коды, устанавливающие режимы доступа к открываемым файлам:



Символ

Описание

R

Файл открывается только для чтения. Если нужного файла на диске нет, то возникает ошибка.

W

Файл открывается только для записи. Если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается.

A

Файл открывается для дозаписи в его конец новой информации.

r+

Файл открывается для редактирования его данных. Возможны и запись, и чтение информации.

w+

То же, что и для r+.

a+

То же, что и для a, только запись можно выполнять в любое место файла. Доступно и чтение файла.

T

Файл открывается в текстовом режиме. Указывается поле r, w, a, r+, w+, a+.

B

Файл открывается в двоичном режиме. Указывается поле r, w, a, r+, w+, a+.

Текстовый режим отличается от двоичного тем, что при открытии файла как текстового пара символов « перевод-строки», «возврат каретки» заменяется на один символ: « перевод-строки» для всех функций записи даныых в файл, а для всех функций вывода символ «перевод-строки» теперь заменяется на два символа: « перевод-строки»,«возврат каретки».

По умолчанию файл открывается в текстовом режиме.

После работы с файлом, доступ к файлу необходимо закрыть. Закрывает файл в языке С функция flose. Например, из предыдущего примераее закрывается так: fclose (f);

Для открытия нескольких файлов введена функция, объявленная следующим образом: Void fcloseall(Void);

Если требуется изменить режим доступа к файлу, то для этого сначала необходимо закрыть данный файл, а затем вновь его открыть, но с другими правами доступа. Для этого используют стандартную функцию freopen, описанную в stdio.h как FILE* freopen (char filename, chov*mode, FILE *stream). Эта функция сначала закрывает файл, связанный с потоком stream (как это делает функция fopen), а затем открывает файл с именем filename и правами доступа mode, записывая информацию об этом файле в переменную stream.

В алгоритмическом языке С имеется возможность работы с временными файлами, т.е. с такими, которые нужны только в процессе работы программы и которые надо удалить после выполнения части вычислений. в этом случае используют функцию tmpfile со следующим объявлением: FILE* tmpfile (void).

Функция tmpfile создает на диске временный файл с правами доступа «w+b» и возвращает указатель на управляющий блок по типу атрибута FILE. После завершения работы программы или после закрытия временного файла он автоматически удаляется из диска.

Все действия по чтению/записи данных в файл можно дразделить на три группы:


  1. Операции посимвольного ввода-вывода,

  2. Операции построчного ввода-вывода,

  3. Операции ввода-вывода по блокам.

Ниже приведены основные функции, применяемые в каждой из указанных трех групп операций.

Посимвольный ввод-вывод

В операциях посимвольного ввода-вывода происходит прием одного символа из файла или передача одного символа в файл.

Функция

Действие функции

int fgets(FILE *fp)

Чтение и возврат символа из открытого файла

int fgetchov(void)

Читает и возвращает символ из файла stdin.

int ungetc(int ch, FILE *fp)

Возвращает символ ch в файл. Следующая операция чтения символа из файла вернет этот символ.

int fputs(int ch, FILE *fp)

Записывает в файл код ch символа.

Построчный ввод-вывод.

В операциях построчного ввода-вывода за один прием происходит перенос из файла (или в файл) строк символов.

Функция

Действие функции

int gets (char *S)

Читает байты из файла stdin и записывает их в строку S до тех пор, пока не встретит символ ' \n ', который заменяется на нуль – терминатор.

int fgets (char *S int m, FILE *fp)

Извлекает байты из файла, описываемого fp, и записывает их в строку S до тех пор, пока не встретит символ ' \n ' или пока не будет считана m байтов.

int fputs (char *S, FILE *fp)

Записывает в файл байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл не переносится и на символ ' \n ' не заменяется.

int puts (char *S)

Записывает в файл, stdout байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл переносится и заменяется на символ ' \n '.

Блоковый ввод-вывод

В операциях блокового ввода-вывода работа происходит с целыми блоками информации.



Функции

Действие функции

int fread (void *ptv, int size, int n, FILE *fp)

Считывает n блоков по size байт каждый из файла fp, в область памяти, на которую указывает указатель ptv (необходимо заранее отвести память под считываемый блок).

int fwrite (void *ptv, int size, int n, FILE *fp)

Записывае n блоков по size байт каждый из области памяти, на которую указывает ptv, в открытый файл fp.

Пример работы с файлами. Следующая программа формирует целочисленный бинарный файл, дозаписывает в его окончание новые данные, и выводит сохраненные данные на печать:

#include

#include

void main(void)

{

int a=1, b=20, c, d;



FILE *in, *out, *add;

clrscr();

/* ........ ЗАПИСЬ ЧИСЕЛ В ФАЙЛ ......*/

in=fopen("lr8.dat","wb");

fprintf(in,"%d %d \n",a,b);

fclose(in);

puts("ЧИСЛА a, b ЗАПИСАНЫ В ФАЙЛ");

puts("Press any key...");

getch();

/* ......... ЧТЕНИЕ ЧИСЕЛ ИЗ ФАЙЛА ........*/

out=fopen("lr8.dat","rb");

fscanf(out,"%d%d", &c, &d);

printf("\n a=%d b=%d ", c, d);

fclose(out);

puts("\n ЧИСЛА ПРОЧИТАНЫ ИЗ ФАЙЛА");

puts("Press any key...");

getch();

/* ......... ДОПОЛНЕНИЕ ФАЙЛА ..........*/

add=fopen("lr8.dat","a");

puts("ВВЕДИТЕ ЧИСЛА ЦЕЛОГО ТИПА c и d");

scanf("%d%d",&c,&d);

fprintf(add,"%d %d \n",c,d);

printf("\n c=%d d=%d \n ",c,d);

fclose(add);

puts("ЧИСЛА c и d ДОПИСАНЫ В ФАЙЛ");

puts("Press any key...");

getch();
/* ......... ЧТЕНИЕ ЧИСЕЛ ИЗ ФАЙЛА ........*/

out=fopen("lr8.dat","rb");

fscanf(out,"%d%d%d%d", &a, &b, &c, &d);

printf("\n a=%d b=%d ", a, b);

printf("\n c=%d d=%d ", c, d);

fclose(out);

puts("\n РАСШИРЕННЫЙ ФАЙЛ!");

puts("Press any key...");

getch();

}



Лабораторная работа №7
Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации