Функции ввода/вывода в Си обеспечивают буферизацию работы с файлами. Это означает, что когда происходит чтение или запись, обмен информации осуществляется не между программой и указателем файлом, а между программой и промежуточным буфером, расположенным в ОП. Если производится запись в файл, то информация из буфера записывается в файл при заполнении буфера или закрытии файла. Если информация считывается из файла, то она на самом деле берется из буфера, а в буфер считывается при открытии файла и в последствии каждый раз при опустошении буфера.
Буферизация ввода/вывода выполняется автоматически. Она ускоряет работу программы, за счет уменьшения обращения к сравнительно медленно работающим внешним устройствам.
Описание файла.
FILE *<файловая переменная>.
Тип дисковых файлов – это тип структуры определенной в studio.h.
Открытие файла.
FILE *fopen(char *<имя файла>,char *<вид обработки>); - функция открывает поток данных, связанный с указателем файлом и возвращает адрес файлового буфера в ОП.
Прототип функции находится в файле stdio.h. Если произошла ошибка при открытии файла, то функция возвращает NULL.
Параметры функции:
- <имя файла> - первый параметр функции fopen, может быть задан следующими спрсобами:
1) сортировкой констант, например:
FILE * stream;
stream=fopen(“C:\\USERS\\SAPR71\\<имя файла>.txt”, <вид обработки>)
2) в программе определенна строка или массив элементов типа char:
FILE * srteam;
char *imf=(char*)malloc(13);
printf(“Введите имя файла”);
gets(imf);
stream-=fopen(imf, <вид обработки>)
- <вид обработки> - второй параметр функции fopen – это строковая константа, которая может принимать одно из следующих значений:
“r” – открыть существующий файл для чтения;
“w” – открыть файл для записи, если файл существовал, то его содержание стирается;
“a” – запись в конец файла, файл создается, если он не существовал;
“r+” – существующий файл открывается для чтения и записи;
“w+” – открыть файл для чтения и записи, если файл существовал, его содержимое теряется;
“a+” – открыть файл для чтения и добавления, если файл не существовал, он создается.
Если файл открыт в режиме “a” или “a+” данные всегда записываются в конец файла; хотя указатель можно всегда перенести, используя соответствующие функции – при записи он всегда будет перемещаться на конец файла, т.е. данные, что были в файле не могут быть затерты.
Если файл открыт в режиме “r+” или “w+” необходимо позиционировать указатель файла.
Если необходимо открыть файл в двоичном режиме в строку <вид обработки> необходимо добавить “b”, например, “rb”, “r+b”.
Закрытие файла.
int fclose(FILE *<файловая переменная>) – Возвращает NULL, если закрытие произошло успешно, и конец файла(EOF). если произошла ошибка.
п.13.5.Ввод\вывод данных из файла.
В программе в любом случае должна быть предусмотрена проверка наличия файла перед работой с ним. Для этого достаточно попытаться открыть этот файл для чтения и проверить значение указателя, возвращаемое функцией fopen.
main()
{ FILE *f;
char *imf=(char*)malloc(13);
printf(“Имя файла”);
gets(imf);
f=fopen(imf, “r”);
if(f!=NULL)
{<обработка файла> fclose(f);}
else rpintf(“Файл %s не открывается для чтения ”, imf);
}
Способа ввода вывода в Си.
Существуют три способа ввода\вывода данных в\из файла:
- прямой(неформатированный);
- символьный;
- форматированный.
Наиболее распространенным способом ввода\вывода при работе с файлами на Си является неформатированный ввод\вывод. При использовании этого способа чтение или запись файл производится байтовыми блоками определенного размера.
1. Неформатированный ввод\вывод.
Неформатированная запись данных в поток:
int fwrite(void *buf, int size, int count, FILE *stream);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.