Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Закрытие файла






 

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

fclose (имя файла), например: fclose (fp);

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

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

 

8.4. Операции ввода/вывода в файл (из файла)

 

Различают следующие операции ввода/вывода:

- ввод-вывод отдельных символов;

- построчный ввод-вывод;

- форматированный ввод-вывод;

- ввод/вывод объектов (данных простых и сложных типов).

Ввод-вывод отдельных символов. Эти операции осуществляются с помощью следующих функций:

1) getc() и fgetc() – ввод символа из файла;

2) puts() и fputc () – вывод символа в файл.

Разница между этими функциями заключается в том, что fgetc() и fputc() – это собственно функции, а getc() и putc() – это макросы.

В программе эти функции записываются следующим образом:

ch= fgetc (fp);

ch принимает значение символа из файла, на который указывает fp.

fputc (ch, fp); – значение символа ch выводится в файл, на который указывает fp.

Пример 8.1. Посимвольного копирования:

# include < stdio.h>

void main (void)

{

char ch;

FILE *ist, *pri;

if((ist = fopen(“text_1.txt”, “г”)) = =NULL)

{

printf (“Не могу открыть файл источник \ n”);

return;

}

if ((pri = fopen(“text_2.txt”, ”w”)) = = NULL)

{

printf (“ Не могу открыть файл приемник \n”);

return;

}

while ((ch = fgetc(ist))! = EOF)

fputc(ch, pri);

fclose (ist);

fclose(pri);

}

Ввод/вывод строк. Операции ввода/вывода строк осуществляется с помощью функций fgets() и fputs () соответственно.

Функция fgets() имеет три аргумента:

char *fgets(s, n, stream),

где s- указатель на местоположение строки;

n- предельная длина считываемой строки;

stream- указатель на файл, который будет читаться.

Функция fputs() имеет два аргумента

int fputs(s, stream),

где s- указатель на местоположение строки символов, которая будет записываться в файл;

stream- указатель файла.

Пример 8.2: Считывание файла строка за строкой и копирование.

# include< stdio.h>

void main (void)

{

int n = 80;

char string[80];

FILE *fpr, *fis;

fis = fopen (“text_1”, “r”);

fpr = fopen (“text_ 2”, “w”);

while ((fgets(string, n, fis))! = NULL)

fputs(string, fpr);

fclose (fis);

fclose (fpr);

}

При достижении конца файла функция fgets возвращает NULL.

Форматированный ввод/вывод. Форматированный ввод/вывод осуществляется функциями fprintf() и fscanf(). Эти функции работают аналогично функциям printf() и scanf(). Разница заключается в дополнительном аргументе- ссылке на файл, с которым они работают. Этот аргумент указывается первым в списке.

Например:

# include < stdio.h>

void main (void)

{

FILE *fp;

int d;

fp = fopen (“file_1.dat”, “a+b”);

fscanf (fp, “%d”, & d);

fclose (fp);

fp = fopen (“file_2. dat”, “r+b”);

fprintf (fp, ”%d”, d);

fclose (fp);

}

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

Блочный ввод-вывод осуществляется функциями fread() и fwrite().

Определение:

fread (ptr, size, n_ obg, stream);

Читать из файла stream в массив ptr (указатель) не более n_obg объектов размером size.

fwrite (ptr, size, n_obg, stream);

Пишет из массива с указателем ptr n_obg объектов размера size в поток stream (файл).

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.