Лекция 5. Файлы в Си презентация

Содержание

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

Слайд 1Лекция 5 Файлы в Си


Слайд 2Понятие файла в языке Си
Файл - это упорядоченная последовательность однотипных компонентов,

расположенных на внешнем носителе.
Файлы предназначены только для хранения информации, а обработка этой информации осуществляется  программами.
Использование файлов целесообразно в случае:
  долговременного хранения данных;
  доступа различных программ к одним и тем же данным;
  обработки больших массивов данных, которые невозможно целиком разместить в оперативной памяти компьютера.
Файл, не содержащий ни одного элемента, называется пустым.
Создается файл путем добавления новых записей в конец первоначально пустого файла.
Длина файла, т.е. количество элементов, не задается при определении файла. 
В языке Си отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку ввода-вывода языка Си (stdio.h - standart input output).


Слайд 3Буферизация ввода-вывода
Считываемая и записываемая информация представляет собой последовательность байтов - "поток"

(stream).
Поток – это логическое устройство, являющееся источником или получателем данных.
В зависимости от того, откуда поступает считываемая информация или куда направляется записываемая информация, поток связывается с соответствующим устройством ввода вывода (клавиатура, дисплей, принтер и т.п.) или с именованной областью внешней памяти – файлом, если требуется долговременно хранить информацию либо получить доступ к хранимой информации.  
При организации ввода-вывода в С используется буферизация, то есть обмен информацией между программой и внешним устройством происходит не непосредственно, а через буфер – специально выделяемую системой область оперативной памяти.
Буферизация  ускоряет работу программы из-за уменьшения количества обращений к внешним устройствам.
В  библиотеке описана константа BUFSIZE, величина которой 512:
#define  BUFSIZE        512               
Для изменения размера буфера предназначены функции   setbuf() или  setvbuf().

Слайд 4Текстовый и бинарный режим работы с файлами
Библиотека stdio.h поддерживает текстовые и

бинарные (двоичные) потоки.
Текстовый поток – это последовательность строк, каждая из которых заканчивается символом ‘\n’. Операционная среда может потребовать коррекции текстового потока. Например, при вводе текстового потока система преобразует символы возврат каретки 0x13 и перевод строки 0x10 в одиночный символ ‘\n’. При обнаружении в текстовом файле символа с кодом 26 (0x26), т.е. признака конца файла, чтение файла в текстовом режиме заканчивается, хотя файл может иметь продолжение. При выводе текстового потока в среду операционной системы происходит обратное преобразование.
Бинарный поток – это последовательность не преобразуемых байтов, представляющих собой некоторые промежуточные данные, которые обладают тем свойством, что если их записать, а затем прочесть той же системой ввода-вывода, то будет получена информация, совпадающая с исходной.

Слайд 5Функция fopen
Прежде чем читать или записывать информацию в файл, он должен

быть открыт функцией fopen и тем самым связан с потоком ввода-вывода. Функция открытия потока возвращает указатель fp на предопределенную в библиотеке stdio.h структуру типа FILE (содержащую всю необходимую для работы с потоком информацию) при успешном открытии потока, или NULL в противном случае.
В stdio.h заданы 3 предопределенных потока :     stdin (стандартный поток ввода), stdout (стандартный поток вывода), stderr (стандартный поток ошибок) 
Вывод данных через stdout и stderr по умолчанию осуществляется на консоль. Ввод данных через stdin по умолчнию осуществляется через клавиатуру. 
Предопределенные потоки всегда открыты. 

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

FILE *fp;
fp = fopen(“спецификация файла”, "способ использования файла");

“Спецификация файла” (т.е. имя файла и путь к нему) может, например, иметь вид:
"c:\\my_prog.txt" - для файла my_prog.txt на диске с: .

“Способ использования файла” - определяет режим открытия файла.



Слайд 6Режимы открытия файла.
r - открыть существующий файл

для чтения; w - создать новый файл для записи (если файл с указанным именем существует, то он будет переписан); а - дополнить файл (открыть существующий файл для записи информации, начиная с конца файла, или создать файл, если он не существует); r+ - открыть существующий файл для чтения и записи; w+ - создать новый файл для чтения и записи; a+ - дополнить или создать файл с возможностью чтения и записи; rb - открыть двоичный файл для чтения; wb - создать двоичный файл для записи; аb - дополнить двоичный файл; r+b - открыть двоичный файл для чтения и записи; w+b - создать двоичный файл для чтения и записи; а+b - дополнить двоичный файл с предоставлением возможности чтения и записи; rt - открыть текстовой файл для чтения; wt - создать текстовый файл для записи; at - дополнить текстовый файл; r+t - открыть текстовой файл для чтения и записи; w+t - создать текстовый файл для чтения и записи; a+t - дополнить текстовый файл с предоставлением возможности записи и чтения.

Строки вида r+b можно записывать и в другой форме: rb+.


Слайд 7Примеры открытия файлов

FILE  *f_in, *f_out;
f_in = fopen ("My_file1","r");
f_out = fopen ("My_file2","w");


Слайд 8Функция fclose
После окончания работы с файлом он должен быть закрыт. Закрытие

файла (текстового или бинарного) выполняется  функцией fclose(): 
fclose(FILE *fp);
 При этом разрывается связь указателя на файл c внешним набором данных. Освободившийся указатель можно использовать для другого файла. 
При успешном завершении операции функция fclose( ) возвращает значение нуль. Любое другое значение свидетельствует об ошибке.
Пример:
fclose(f_in);


Слайд 9Проверка признака конца файла
При каждой операции ввода/вывода происходит перемещение указателя текущей

позиции в файле, в какой-то момент указатель достигает конца файла. Структура типа FILE имеет поле – индикатор конца файла. Функция feof() проверяет состояние индикатора конца файла и возвращает значение 0, если конец файла не был достигнут, или значение, отличное от нуля, если был достигнут конец файла. Функция имеет единственный аргумент – указатель на поток типа FILE.
Вызов функции:
if (! feof(f_in))…
проверяет, что конец файла еще не достигнут.


Слайд 10Функции ввода/вывода. Функции fgetc() и fputc().

Простейший способ выполнить чтение из файла или запись в

файл – использовать функции getc() или putc().
Функция getc() выбирает из файла очередной символ; ей нужно только знать указатель на файл:
 char Symb = getc(f_in);
Если при обработке достигается конец файла, то функция getc() возвращает значение EOF(end of file).
Функция putc() заносит значение символа Symb в файл, на который указывает f_out. Формат вызова функции: 
putc(Symb,f_out);

Слайд 11Функции fgetc() и fputc().
Пример 1. Текст из файла my_char.txt выводится на экран. Если файл не найден, на

экран выводится сообщение "File not found!":
#include 
int main(void)
{
FILE *ptr;
unsigned char ch;
if ((ptr=fopen("my_char.txt","r"))!=NULL)
{
ch=fgetc(ptr);
while (!feof(ptr))
{
printf("%c",ch);
ch=fgetc(ptr);
}
fclose(ptr);
}
еlse printf("\nFile not found!");
return 0;
}
В этом примере для чтения из файла используется переменная ptr. При открытии файла производится проверка. Если переменной ptr присвоено значение NULL, то файл не найден; на экран выводится соответствующее сообщение, и программа завершается. Если ptr получила ненулевое значение, то файл открыт. Далее выполняется чтение символов из файла до тех пор, пока не будет достигнут конец файла (!feof(ptr)). Прочитанные символы помещаются в переменную ch, а затем выводятся на экран.


Слайд 12Функции getc() и putc().
Пример 2. Записать в файл буквы, вводимые с клавиатуры.
Ввод продолжается до нажатия

клавиши F6 или CTRL/z
(ввод символа EOF – конца файла):

#include 
int main(void)
{
char c;
FILE *out;
out=fopen("Liter","w");
while ((c=getch( ) )!=EOF)
fputc(c,out);
fclose(out);
return 0;
}



Слайд 13Функции fscanf() и fprintf()
Функции fscanf() и fprintf() выполняют форматированный ввод/вывод. 
Чтение из файла выполняет функция fscanf():
fscanf(f_in,[строка формата],[список адресов переменных]);
Функция возвращает количество введенных значений или EOF.

Запись в

файл осуществляет функция fprintf():
fprintf(f_out,[строка формата],[список переменных, констант]);
Функция возвращает количество выведенных байт (символов) или EOF.
Строка формата функций fscanf() и fprintf() формируется так же, как
при консольном вводе/выводе функциями printf() и scanf().

Следует заметить, что вызов функции
fscanf(stdin,[строка формата],[список адресов переменных]);
эквивалентен вызову
scanf([строка формата],[список адресов переменных]);

Аналогично,
fprintf(stdout, [строка формата],[список переменных, констант]);
эквивалентно
printf([строка формата],[список переменных, констант]);


Слайд 14 Примеры программ, использующих функции fscanf() и fprintf().
Пример 1. В программе создается массив, состоящий

из четырех целых чисел. Вывести массив в файл:
#include 
#define n 4
int main() {
int i=0;
int array[n]={4,44,446,4466};
FILE *out;
out=fopen("num_arr.txt","w");
for(;ifprintf(out,"%6d",array[i]);
fclose(out);
return 0; }
В результате выполнения программы в файл num_arr.txt будет помещена
следующая информация:


Слайд 15 Примеры программ, использующих функции fscanf() и fprintf().
#include 
int main() {
int S=0, count=0, numb;
FILE *in;
if ((in=fopen("num_arr.txt","r"))!=NULL)
{
while (!feof(in))
{
fscanf(in,"%d",&numb);
S+=numb;
count++;
printf("%d\n", numb);
}
double

aver=(double)S/count;
printf("Average=%f\n", aver);
fclose(in);
}
else
printf("\nФайл не найден!");
return 0; }

Пример 2. Имеется файл данных, содержащий целые числа, разделенные пробелами. Количество чисел в файле неизвестно. Требуется найти среднее арифметическое значение этих чисел.



Чтение чисел из файла выполняется в переменную numb до тех пор, пока не будет достигнут конец файла. Одновременно ведется подсчет количества прочитанных символов в переменной count и накопление суммы прочитанных чисел в переменной S. Переменные S и count целые, поэтому для правильного вычисления среднего арифметического, необходимо выполнить преобразование одной из этих переменных в формат double.


Слайд 16Примеры программ, использующих функции fscanf() и fprintf().
#include
#include
int main() {      int

bal;      char name[15];      FILE *file;
if ((file = fopen("1.txt","w")) == NULL)         printf("Файл невозможно открыть или создать\n");      else{         for(;;){            scanf ("%d%s", &bal, name);            if (bal == 0)               break;            fprintf(file,"%d %s\n", bal, name);         }      }      fclose(file); 
return 0; }

Пример 3. Ввод имени и балла.

FILE *file;
объявляем указатель на структуру File ( дескриптор файла ).

if ((file = fopen("1.txt","w")) == NULL)
функция fopen принимает два параметра.
Первый - это имя файла,
второй - режим работы с файлом, в котором он будет открыт.
В нашем режиме, если файл не существует, то он создается,
а если файл уже был, то его содержимое полностью стирается.
Эта функция возвращает указатель на структуру FILE ,
т.е. теперь мы сможем управлять созданным файлом при помощи нашего указателя file.
Оператор if тут используется, так как идет проверка
указателя на NULL, а NULL может быть, только если файл мы не смогли открыть.

fprintf(file,"%d %s\n", bal, name);
оператор записывает данные в файл.
Принцип действия тот же, какой и у оператора printf, только тут
в начале указывается указатель на файл , в который будет производится запись данных.

fclose(file);
раз данные мы записали и файл нам больше не нужен,
то смело может закрывать его, тем самым освобождая ресурсы.


Слайд 17Задание
Создайте 10 записей, содержащих
информацию о железнодорожных
маршрутах. В нём должны

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


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика