Главная » Просмотр файлов » Лекция 3. Файлы в Си

Лекция 3. Файлы в Си (1168206)

Файл №1168206 Лекция 3. Файлы в Си (Лекция 3. Файлы в Си)Лекция 3. Файлы в Си (1168206)2020-03-23СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Лекция 3. Файлы в Си3.1. Общие понятия.Термин файл используется в программировании в двух смыслах.В рамках операционной системы файл понимается как область памятивнешнего запоминающего устройства (обычно диска), имеющая имя. Валгоритмических языках файл - это тип данных, используемый, какправило, при работе с внешними запоминающими устройствами. В Синет специального типа файл, но есть предопределенный структурныйтип FILE, описание которого содержится в заголовочном файлеstdio.h.Файл - это последовательность однотипных компонент.Число компонент файла не ограничено. Компонентой файла можетбыть строка или байт, или значение какого-либо типа (целого, вещественного, структура, и т.

д.). После последней компоненты файластоит специальный код, называемый признаком конца файла; этот кодобычно ставится автоматически, без участия программиста.В классическом понимании файл рассматривается как абстрактное обобщение данных на устройстве с последовательным доступом, типичным представителем которого является магнитная лента.В библиотеках современных языков программирования, конечно, имеются средства и для работы с файлами прямого доступа.Абстрактная последовательность данных на некотором внешнемустройстве также называется потоком.Обычно в алгоритмических языках определяется программное ифизическое имя файлов. Программное имя - это имя переменнойтипа файл (в СИ типа FILE*), физическое имя - это имя файла навнешнем запоминающем устройстве.

Существуют специальные операторы, связывающие программное и физическое имя файла(см.§3.2).Файлы бывают текстовыми и двоичными.Текстовые файлы хранят информацию во внешнем представлении. Они имеют два основных признака: во-первых, их компонентами являются строки символов; во-вторых, эта символьная ин-формация при чтении из файла или записи в файл преобразуется всоответствии с типом вводимых или выводимых переменных. Этифайлы являются обобщением данных на устройстве консоль (CON).Умение работать с текстовыми файлами необходимо даже начинающим программистам, так как обычно имеется потребность в длительном хранении исходных и выходных данных.Текстовые файлы можно ввести в ЭВМ, прочитать, исправить спомощью текстового редактора. Они хранят информацию во внешнемпредставлении, в виде, понятном для человека.

Такие файлы частоназываются видимыми.Двоичный файл - это последовательность байтов; обмен информации между двоичным файлом и данными программы происходит без преобразования.3.2. Функции Си для работы с файламиШаблон структуры FILE и прототипы основных функций работы сфайлами хранятся в stdio.h.

Перед использованием файла необходимо:1. Описать его программное имя как указатель на структуру типаFILE:FILE *ИмяУказателя2. Открыть файл. Функция открытия файла устанавливает связьмежду программным и физическим именами файла и подготавливает его к использованию.Шаблон функции открытия файла:FILE *fopen(char *ИмяФайла, char *режим);первый параметр задает строку, в которой хранится физическоеимя файла, записанное по правилам операционной системы, второй режим открытия.Приведем некоторые режимы:“r” - открыть для чтения;“w” - открыть для записи;“rb” - открыть двоичный файл для чтения;“wb” - открыть двоичный файл для записи;“rt” - открыть текстовый файл для чтения;2“wt” - открыть текстовый файл для записи;“a” – открыть файл для дополнения.Результат функции fopen необходимо присвоить переменной типа FILE *.

Если функции fopen удалось открыть указанный файл, возвращается указатель на FILE. Если же файл не может быть открыт,возвращается NULL.Пример открытия файла и обнаружения ошибки при открытии:FILE *fp;fp=fopen(“x.txt”,”w”);if (fp==NULL)puts(“Ошибка при открытии файла”)else ....Или:FILE *fp;if ((fp=fopen(“x.txt”,”w”))==NULL){ puts(“Ошибка при открытии файла”);exit(1); }.Функция с шаблономint feof(FILE *fp);возвращает значение, не равное 0 (истина), если (при открытиифайла, или чтении из файла, или записи в файл) конец файла достигнут, и значение 0 (ложь) в противном случае.В стандартной библиотеке Си функции ввода-вывода, в частности доступа к файлам, могут возвращать значение, равное символьной константе (точнее макроопределению) EOF для индикации, чтодостигнут конец файла. Реальное значение EOF является отрицательным числом, зависящим от системы (в основном −1), что гарантирует несовпадение с кодом символа.Далее поясним, что такое открытие файла для чтения, записи идополнения.Открытие файла для чтения предусматривает выполнение следующих действий:1.

Поиск файла с заданным физическим именем; если файл ненайден, то выводится сообщение об ошибке.2. Указатель файла устанавливается на первую компоненту.33. Компонента, на которой стоит указатель, считывается в буфер.4. Если считан признак конца файла, то функция feof устанавливается в значение истина, иначе – в значение ложь.Открытие файла для записи предусматривает выполнение следующих действий:1.

Поиск файла с заданным физическим именем; если файл ненайден, то создается новый файл.2. Содержимое файла очищается.3. Указатель файла устанавливается на конец файла, который, поскольку файл очищен, одновременно является его началом.4. Функция feof устанавливается в значение истина. Это значениесохраняется при последующей записи в файл, т. е. запись происходит в конец файла.Открытие файла для дополненния предусматривает выполнениеследующих действий:1. Поиск файла с заданным физическим именем; если файл ненайден, то выдается сообщение об ошибке.2. Указатель файла устанавливается на конец файла (после последней компоненты).3. Функция feof устанавливается в значение истина.Рассмотренные ранее функции scanf, printf, puts, gets имеютаналоги для работы с текстовыми файлами. Их названия получаютсядобавлением справа буквы f к именам упомянутых функций.Шаблоны функций файлового форматного вывода и ввода:int fprintf(програм_имя_ файла, форматная_строка, список_вывода);int fscanf(програм_имя_ файла, форматная_строка, список_вывода);Шаблоны функций fputs и fgets:char *fgets(char *string, int nmax,FILE *f)char *fputs(char *string, FILE *f)где string - адрес начала вводимого массива символов,f - указатель на текстовый файл,nmax - максимальная длина вводимой строки плюс 1.Функции putc (записать символ в поток) и getc (прочитать символиз потока) работают как с текстовыми, так и с двоичными файлами.Их шаблоны:4int putc(int ch, FILE* f)(если оператор выполнен успешно, товозвращается записанный символ, иначе EOF)int getc(FILE *f)(если считывание не выполнено, то EOF)Для работы с двоичными файлами предназначены функциичтения и записи блоков:unsigned fread(void *buf, int zap, int n,FILE *f)unsigned fwrite(const void *buf, int zap, int n,FILE *f)где buf - указатель на область памяти, с которой будет происходить обмен информацией, zap – размер в байтах считываемого илизаписываемого элемента (записи), n – максимальное число считываемых (записываемых) элементов, f - указатель на файл.Функция fread (fwrite) возвращает количество прочитанных (записанных) записей, которое стандартно равно n, но может быть меньше n при возникновении ошибки или достижении конца файла до считывания n записей.После окончания работы с файлом его необходимо закрыть.

Призакрытии файла выполняется его сохранение (естественно, с перерегистрацией в каталоге). Кроме того, связь между программным и физическим именем файла, установленная при открытии файла, разрушается.Шаблон функции закрытия файла:int fclose(FILE * f) - возвращает значение нуль, если операциязакрытия прошла успешно.3.3. Примеры программ, использующих файлыПример 1. Размеры матрицы n и m и значения элементов матрицы считываются из текстового файла f_in.txt , затем матрица изменяется (скажите, как) и выводится в текстовый файл f_out.txt.#include <stdio.h>#include <conio.h>void main(){float a[5][5]; int n,m,i,j;FILE* f_in, *f_out;f_in=fopen("f_in.txt","rt"); //"c:\\dir\\f_in.txt"5fscanf(f_in,"%d%d", &n,&m);for (i=0;i<n;i++)for (j=0;j<m;j++)fscanf(f_in,"%f",&a[i][j]);//fscanf(f_in,"%f", *(a+i)+j);//закончен ввод из файлаfor (i=0;i<n;i++)for (j=0;j<m;j++)a[i][j]=a[i][j]*a[i][j];//закончена обработка матрицыf_out=fopen("f_out.txt","wt");fputs("output matrix:\n",f_out);for (i=0;i<n;i++){for (j=0;j<m;j++)fprintf(f_out,"%6.1f ",a[i][j]);fprintf(f_out,"\n");}// вывели изменную матрицу в файлfclose(f_in);//необязательноfclose(f_out);//обязательно!!!!!puts("output file is ready!"); puts("output file is ready!");//каждая фраза на отдельной строке_getch();}Пример 2.

В каждой строке входного файла f_in.txt через пробел записаны фамилия и имя человека. Каждая строка входного файла считывается в переменную-строку s. В выходной файл f_out.txt записываются строки входного файла, содержащие фамилии «Иванов» и «Иванова». Обратите наличие пробела после фамилий в соответствующихстроковых литералах программы. Зачем он нужен?#include <stdio.h>#include <conio.h>#include <string.h>#define NMAX 1006void main(){char s[NMAX]; int k,i;//k-число ИвановыхFILE *f_in, *f_out;f_in=fopen("f_in.txt", "rt");if (f_in==NULL)puts("file is not opened");elseif feof(f_in)puts("file is empty");else{f_out=fopen("f_out.txt", "wt");k=0;while (fgets(s,NMAX+1,f_in)!=NULL){if (strstr(s,"Иванов ")!=NULL || strstr(s,"Иванова ")!=NULL){k=k+1;fputs(s,f_out);}}if (k>0){fclose(f_out);printf ("k=%d\n", k);puts("output file is ready");}elseputs("k=0");}_getch();}Пример 3.

Та же задача, что и в примере 2, но каждая строка текстового файла считывается в переменную-структуру.7#include <stdio.h>#include <conio.h>#include <string.h>#pragma hdrstop#define NMAX 100void main(){ typedef struct {char s1[NMAX],s2[NMAX];} fam_im;fam_im f_i;int k,i;//число ИвановыхFILE *f_in, *f_out;f_in=fopen("f_in.txt", "rt");if (f_in==NULL)puts("file is not opened");elseif feof(f_in)puts("file is empty");else{f_out=fopen("f_out.txt", "wt");k=0;while (fscanf(f_in,"%s %s",&f_i.s1,&f_i.s2)!=EOF){if (strcmp(f_i.s1,"Иванов")==0|| strcmp(f_i.s1,"Иванова")==0){k=k+1;fprintf(f_out, "%s %s\n", f_i.s1,f_i.s2);}}if (k>0){fclose(f_out);printf ("k=%d\n", k);puts("output file is ready");8}elseputs("k=0");}_getch();}9.

Характеристики

Тип файла
PDF-файл
Размер
313,59 Kb
Тип материала
Высшее учебное заведение

Тип файла PDF

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

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее