Тема 2 — Файлы — 2011 — новая


Чтобы посмотреть презентацию с картинками, оформлением и слайдами, скачайте ее файл и откройте в PowerPoint на своем компьютере.
Текстовое содержимое слайдов презентации:

Ф а й л ы Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как единое целое. В файлах размещаются данные, предназначенные для длительного хранения.Различают два вида файлов: текстовые и бинарные. Текстовые файлы представляют собой последовательность символов и могут быть просмотрены и отредактированы с помощью любого текстового редактора. Бинарные (двоичные) файлы представляют собой последовательность данных, структура которых определяется программно. Файлы рассматриваются компилятором как последовательность (поток байт) информации. В начале работы любой программы автоматически открываются стандартные потоки ввода (stdin) и вывода (stdout).Для файлов определен указатель (маркер) чтения-записи данных, который определяет текущую позицию доступа к файлу. В языке Си имеется большой набор функций для работы с файлами, большинство в stdio.h и io.h. Потоки данных, с которыми работают функции ввода-вывода по умолчанию, буферизированы. При открытии потока с ним связывается определенный участок памяти, который называется буфером. Все операции чтения-записи ведутся через этот буфер. Для обработки любого файла необходимо выполнить следующие действия:1) открыть файл;2) обработать данные файла (запись, чтение, поиск и т.п.);3) закрыть файл. Открытие файлаКаждому файлу в программе присваивается внутреннее логическое имя, используемое в дальнейшем при обращении к нему. Логическое имя (имя файла) – это указатель на файл, т.е. на область памяти, где содержится вся необходимая информация о нем. Формат объявления : FILE *Имя_Указателя; FILE – структурный тип, описанный в библиотеке stdio.h (содержит 9-ть полей). Прежде чем начать работать с файлом, его нужно открыть для доступа с помощью функции fopen ( Имя_Файла, Режим ) Данная функция фактическому Имени Файла на носителе (дискета, винчестер) ставит в соответствие логическое имя (Указатель файла).Имя файла и путь к нему задается первым параметром – строкой, например: “d:\\work\\Sved.txt” – файл с именем Sved, расширением txt, находящийся на винчестере в папке work.Обратный слеш «\», как специальный символ в строке записывается дважды. Если путь к файлу не указан, его размещением будет текущая папка.При успешном открытии функция fopen возвращает указатель на файл (указатель файла). При ошибке возвращается NULL. Ошибки обычно возникают, когда неверно указывается путь к открываемому файлу, например, если указать путь, запрещенный для записи. Второй параметр – строка, в которой задается режим доступа к файлу:w – файл открывается для записи (write); если файла нет, то он создается; если файл уже есть, то прежняя информация уничтожается;r – файл открывается для чтения (read); если такого файла нет, то возникает ошибка;a – файл открывается для добавления (append) новой информации в конец;r+ – файл открывается для редактирования данных;t – файл открывается в текстовом режиме; b – файл открывается в двоичном режиме. Последние два режима используются совместно с рассмотренными выше. Возможны следующие комбинации режимов доступа: w+b, wb+, rt+, а также некоторые другие комбинации.По умолчанию файл открывается в текстовом режиме. Пример открытия файла: FILE *f; – Объявляется указатель f f = fopen ("Dat_sp.dat ", "w"); – открывается для записи файл с указателем f в текущей папке, имеющий имя Dat_sp.dat, или более кратко:FILE *f = fopen ("Dat_sp.dat", "w"); Закрытие файлаПосле работы с файлом доступ к нему необходимо закрыть с помощью функцииfclose ( Указатель_Файла ); Для предыдущего примера: fclose ( f );Если надо изменить режим доступа к уже открытому файлу, то его необходимо закрыть, а затем открыть с другим режимом:freopen ( Имя_Файла, Режим, Указатель );- закрывается файл с заданным в третьем параметре Указателе (аналогично функции fclose), а затем открывается файл, используя первый и второй параметры (аналогично функции fopen). Запись-чтение информацииОсновными действиями при работе с файлами являются запись и чтение информации.Все действия по чтению-записи данных в файл можно разделить на три группы:– операции посимвольного ввода-вывода;– операции построчного ввода-вывода;– операции ввода-вывода блоками.Рассмотрим основные функции записи-чтения данных. Создание текстовых результирующих файлов обычно необходимо для оформления различных отчетов.Для работы с текстовыми файлами чаще всего используются функцииfprintf, fscanf, fgets, fputsПараметры и действия этих функций аналогичны рассмотренным ранее функциям printf, scanf, gets и puts. Отличие состоит в том, что printf и др. работают по умолчанию с экраном монитора и клавиатурой, а функции fprintf и др. – с файлом, указатель которого является одним из параметров. Например:. . .FILE *f1;int a = 2, b = 3;printf ( ” %d + %d = %d \n ”, a, b, a+b);fprintf ( f1,” %d + %d = %d\n ”, a, b, a+b);fclose ( f1 );. . .Просмотрев файл f1 любым текстовым редактором, можно убедиться, что данные в нем располагаются так же, как и на экране. Бинарные файлы обычно используются для обработки данных, состоящих из структур, чтение и запись которых удобно выполнять блоками.Функцияfread ( p, size, n, f );выполняет чтение из файла «f» «n» блоков размером «size» байт каждый в область памяти, адрес которой «p». В случае успеха функция возвращает количество считанных блоков. Функцияfwrite ( p, size, n, f );выполняет запись в файл «f» «n» блоков размером «size» байт каждый из области памяти, с адресом «p». Позиционирование в файлеКаждый открытый файл имеет скрытый указатель на текущую позицию в нем. При открытии файла этот указатель устанавливается на позицию, определенную режимом, и все операции в файле будут выполняться с данными, начинающимися в этой позиции. При каждом чтении (записи) указатель смещается на количество прочитанных (записанных) байт – это последовательный доступ к данным. С помощью функции fseek можно выполнить чтение или запись данных в произвольном порядке. fseek ( f, size, code )выполняет смещение указателя файла f на size байт в направлении code :0 – смещение от начала;1 – смещение от текущей позиции;2 – смещение от конца файла.Смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.В случае успеха функция возвращает 0, 1 –при ошибке, например, выход за пределы файла. Доступ к файлу с использованием этой функции называют произвольным доступом. Рассмотрим некоторые полезные функции:1) ftell ( f ) – определяет значение указателя на текущую позицию в файле, –1 в случае ошибки;2) fileno ( f ) – определяет значение дескрип-тора (fd) файла f, т.е. число, определяющее номер файла; 3) filelength ( fd ) – определяет длину файла в байтах, имеющего дескриптор fd; 4) chsize ( fd, pos ) – выполняет изменение размера файла, имеющего номер fd, признак конца файла устанавливается после байта с номером pos; 5) feof ( f ) – возвращает ненулевое значение при правильной записи признака конца файла. Пример 1#include #include #include void main() {FILE *file;char* file_name ;char t[100],str[100];char load_string[50] = "none";cin>>t; gets(str);strcat(t,".txt");file_name=t;file = fopen( file_name, "w" ); fputs( str, file );fclose( file ); file = fopen( file_name, "r" ); //Открытие файла для чтенияif( file != 0 ){fgets( load_string, 50 , file ); cout << "load_string = " << load_string << endl;}else{cout << "File not found !!!" << endl;}fclose(file);} Пример 2 Создать программу, в которой реализованы создание, добавление и просмотр файла, содержащего информацию о фамилии и среднем балле студентов. Процесс добавления информации заканчивается при нажатии точки.#include #include struct Sved {char Fam[30];double S_Bal;} zap,zapt; char Spis[]="c:\\work\\Sp.dat";FILE *F_zap;FILE* Open_file(char*, char*);void main (void) {int i, j, kodR, size = sizeof(Sved), kod_read;while(1) {puts("Создать – 1\n Просмотреть– 2\n Добавить– 3\n Выход – 0");scanf("%d",&kodR); switch(kodR) {case 1: case 3:if(kodR==1) F_zap = Open_file (Spis,"w+");else F_zap = Open_file (Spis,"a+");while(1) {puts("\n Fam (. – end) ");scanf("%s",zap.Fam);if((zap.Fam[0])=='.') break;puts("\n Ball: ");scanf("%lf",&zap.S_Bal);fwrite(&zap,size,1,F_zap);} fclose(F_zap); break; case 2: F_zap = Open_file (Spis,"r+"); int nom=1;while(1) {if(!fread(&zap,size, 1, F_zap)) break;printf(" %2d: %20s %5.2lf\n", nom++, zap.Fam, zap.S_Bal);}fclose(F_zap);break;case 0: return; // exit(0);} // Закрывает switch() }// Закрывает while()} // Функция обработки ошибочной ситуации при открытии файлаFILE* Open_file(char *file, char *kod) {FILE *f; if(!(f = fopen(file, kod))) {puts("Open File Error!");exit(1);} return f;} Пример 3 Написать программу, вводящую в файл или читающую из файла ведомость студентов, сдавших экзамены. Каждая структура должна содержать фамилию, а также оценки по математике и программированию. Вывести список студентов, сдавших экзамен по программированию с оценкой 4, и записать эту информацию в текстовой файл.#include #include #include #include #include FILE *fl;typedef struct { char fio[30]; unsigned char matem; unsigned char oaip;} TStudent; TStudent stud[30]; // Массив структур char name[20];// Имя файла int nst=0;// Число введенных структурint menu(); // Менюvoid nnf(); // Ввести имя файлаvoid newf(); // Создать новый файлvoid spisok(); // Ввести списокvoid opf(); // Открыть файлvoid resc(); // вывести результат на экранvoid resf(); // Вывести результат в файл int main() { while (true) { switch (menu()){ case 1: nnf(); break; case 2: newf(); break; case 3: spisok(); break; case 4: opf(); break; case 5: resc(); break; case 6: resf(); break; case 7: return 0; default: "Viberite pravilno!";} puts("Press any key to continue"); getch(); system("cls"); } } int menu() // Меню{ cout << "VIBERITE:" << endl; cout << "1. Vvod file name" << endl; cout << "2. New file" << endl; cout << "3. Vvesti spisok" << endl; cout << "4. Open file" << endl; cout << "5. Vivesti result" << endl; cout << "6. Vivesti v fail" << endl; cout << "7. Exit" << endl; int i; cin >> i; return i;} void nnf() // Ввести имя файла{ cout << "Vvedite file name" << endl; cin >> name;}void newf() // Создать новый файл{ if ((fl = fopen(name,"wb"))==NULL) { cout << "Oshibka pri sozdanii"<> nst; for (int i=0; i> stud[i].fio; cout << "Vvedite otcenku po matematike: "; cin >> stud[i].matem; cout << "Vvedite otcenku po OAiP: "; cin >> stud[i].oaip; fwrite( &stud[i], sizeof(TStudent), 1, fl ); } fclose(fl); } void opf() // Открыть файл{if ((fl = fopen(name,"rb"))==NULL) { cout << "Oshibka pri otkritii"<> namet;if ((ft = fopen(namet,"w"))==NULL) { cout << "Oshibka pri sozdanii "<

Приложенные файлы

  • ppt 26579865
    Размер файла: 167 kB Загрузок: 0

Добавить комментарий