Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы по информатике1.docx
Скачиваний:
1
Добавлен:
15.04.2019
Размер:
99.25 Кб
Скачать

26 Билет. Файлы прямого и последовательного доступа к данным. Форматизированный и неформатизированный ввод/вывод.

В C/C++ возможны последовательный и прямой доступы к данным, и форматизированный/не форматизированный ввод/вывод.

Для организации форматизированной передачи необходимо подключить к программе <stdio.h>, для не форматизированной <fstream.h>

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

Существует 5 предопределенных потоков:

stdin - ввод из стандартного устройства.

stdout - вывод на стандартное устройство.

stderr - определения стандартного устройства ( всегда монитор ) для вывода сообщения об ошибке.

stdprn - определяет вывод на печатающее устройство.

stdaux - дополнительный поток.

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

Открыть поток для форматизированной передачи можно следующим образом:

1) FILE *<имя переменной>;

<имя переменной>=fopen(<имя файла на диске>,<режим>);

2) FILE *<имя переменной>=fopen(<имя файла на диске>,<режим>);

Первый вариант описывает указатель на файл, а затем открывает этот файл с помощью fopen, устанавливая соответствие между файл. ???? перемен. и именем файла на диске, и определяет режим ( запись или чтение).

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

Возможные значения параметра <режим>

"r"-....; для чтения

"w"-.....; для записи ( инф. заменяется на новую)

"a" - .....; для ДОзаписи ( информация не стирается, идёт добавление новой информации)

Эти символы со знаком плюс, "r+", "w+", "a+" устанавливают режим позволяющий и записывать в файл и считывать из него.

Режим открытия может содержать символ t и b

например "rt, "wb", "at+"

По умолчанию используется текстовый режим.

Функция

freopen (<имя файла на диске>,<режим>,<указатель на файл>) работает аналогично fopen но предварительно закрывает поток если он был ранее открыт.

Например FILE *f1; f1=fopen("d:\\work\\f1.ipt"."r");

FILE *f2 = fopen ("d:\\work\\f2.opt"."w");

Поработав с файлом необходимо его закрыть:

fclose (<указатель на файл>);

или fcloseall ();

Для просмотра всех элементов файла можно использовать

feof (<файловая переменная>)

Значение !=0 если не достигнут конец файла и =0 если достигнут.

Неформатизированная передача данных

<fstream.h>

В стандартной библиотеке содержится 3 класса для работы с файлами Открытие потока осуществляется конструкторами:

ifstream <имя потока>(<имя файла на диске>);

ofstream<имя потока>(<имя файла на диске>);

fstream<имя потока>(<имя файла на диске>);

Операции помещения в поток (<<) и извлечения из потока (>>)

Пример.

ifstream inputf (''file_1.txt'');

inputf >> x>> y;

ofstream outputf(''file_2.txt'');

outputf << sqrt(x) << (x+y);

Закрытие потоков

inputf close ()

outputf close ()

НЕ ДОДЕЛАН БИЛЕТ ПОХОДУ...

27 билет. Работа с файлами в С/C++, примеры.

ftell (<файловая переменная>) значением функции является текущая позиция.

fgetpos (<файловая переменная>,<имя>);

fseek (<файловая переменная>,<смещение>,<база>);

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

Базой может быть значение SEEK_SET - начало файла. SEEK_CUR - текущая позиция. SEEK_END конец файла.

fsetpos (<файловая переменная>,<pos> - установить указатель файла, соответствующей файловой переменной на позицию pos.

rewind (<файловая переменная>) - устанавливает указатель на начало файла.

malloc (<размер>) - выделяет блок памяти указанного размера в байтах. Указатель на начало или NULL, если места недостаточно, а содержимое не определено.

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

fread (<буфер>,<длина записи>,<количество>,<файловая переменная>)

frite (<буфер>,<длина записи>,<количество>,<файловая переменная>)

fread считывает из файла соответствующей файловой переменной в указанный буфер заданное количество записей указанной длины.

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