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

Лабораторная работа № 6.

ВВОД / ВЫВОД ИНФОРМАЦИИ СРЕДСТВАМИ C++. ФАЙЛЫ.

  1. Цель работы:

Изучить особенности работы с текстовыми и бинарными файлами.

2. Подготовка к работе.

Изучить основные методы обработки текстовых файлов . Необходимо знать , как осуществляется последовательный доступ к элементам двоичных файлов [лекция 14, 16.]

3. Теоретическая часть.

3.1. Библиотечные функции.

Библиотечные функции для работы с файлами делятся на потоковые и префиксные. Их существенное отличие состоит в том, что потоковые функции выполняют дополнительную буферизацию (на уровне библиотечной функции и на уровне MS DOS), а префиксные сразу обращаются к функциям MS DOS. Таким образом, префиксные функции являются блоко - ориентированными , а их использование приносит выигрыш при переносе целой группы файлов (кратной размеру сектора диска 512 байт). Потоковые функции приносят выигрыш при работе с символьными и строковыми данными.

3.2. Режимы доступа к файлам.

Вне зависимости от типа библиотечных функций существует два различных режимов доступа к файлам: текстовый и двоичный.

В текстовом режиме производится трансляция символов CR LF (0Dh 0Ah) - перевод строки. При чтении пара символов CR LF преобразуется в «\n», а при записи производится обратное преобразование. Кроме этого символ Ctrl-Z (ASCII 1Ah), считается, что достигнут конец файла (EOF).

В двоичном режиме все символы рассматриваются как не имеющие определённого смысла, и никакого преобразования не производится.

Режим доступа к файлу задаётся двумя способами: при открытии файла путём задания соответствующей опции или заданием значения предопределённой (описанной в <stdlib.h>) переменной _fmode. Переменная _fmode может принимать два значения

O_BINARI (для двоичного режима) и O_TEXT (для текстового режима). Например:

_fmode= O_BINARI;

_fmode= O_TEXT;

По умолчанию режим доступа определён как O_TEXT.

3.3. Потоковый ввод/вывод информации средствами Turbo C++.

При организации потокового ввода/вывода информации используется предопределённый тип FILE (типа структура), описанный в заголовочном файле <stdio.h>.

Открытие файла выполняется с помощью функции fopen

FILE _FAR *_Cdecl _FARFUNC fopen(const char _FAR *__path, const char _FAR *__mode);

Вывод информации на экран дисплея

Функция puts() - аргументом функции может быть:

- строковый литерал puts("данная информация отобразится на экране дисплея");

- строковая переменная или константа.

Например:

#define G "хорошо"

char g[]="хорошо "

puts(g); puts(G); //на экране дисплея отобразится дважды слово

// "хорошо"(функция переводит курсор автоматически)

"хорошо"

"хорошо"

Функция putchar() - предназначена для вывода единичного символа . Аргументом функции может быть:

#define GO 'f'

char g='f'

puts('f'); // символьный литерал

puts(g); // символьная переменная

puts(GO); // символьная константа

Функция printf() - для вывода числовых данных

Ввод данных

Функция gets() - функция вводит строку в переменную

Для организации ввода/вывода посредством файлов необходимо организовать связь логического файла с физическим .

FILE *fopen(const char *filename, const char *mode);

Функция возвращает указатель на переменную типа FILE, описывающий открытый поток файлового ввода -вывода. Если невозможно открыть (создать) файл, функция возвращает null- указатель. Переменная filename- указатель на ASCIIZ - строку символов, задающую спецификацию открытого (создаваемого) файла. Например:

"c:\\tc\\rabcat\\myfile.dat"

Если не специфицируется буква накопителя, используется накопитель по умолчанию, определённый

Переменная mode - указатель на ASCIIZ - строку символов, задающую режим открытия файла

mode

режим открытия файла

r

Файл открывается для чтения. При успешном открытии файла указатель файла (считывающая головка) устанавливается в 0. Если файл с заданной спецификацией не существовал, функция fopen возвращает NULL.

w

Файл открывается для записи. Если файл не существовал он создаётся в заданном директории с именем filename.

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

a

Файл открывается для пополнения. После открытия файла указатель файла устанавливается на позицию конца файла. В результате при записи в файл сохраняется содержимое файла.

r+

Файл открывается для обновления (чтения и записи). После открытия файла указатель файла устанавливается на позицию 0. Однако немедленное закрытие файла не приводит к его усечению.

w+

Файл открывается для обновления (чтения и записи). Если файл не существовал он создаётся в заданном директории с именем filename.

После открытия файла указатель файла устанавливается на позицию 0, а немедленное закрытие файла приводит к его усечению.

a+

Файл открывается для обновления (чтения и записи). После открытия файла указатель файла устанавливается на позицию EOF.

Закрытие файла не приводит к его усечению.

b

Файл открывается двоичном режиме. Специфицируется двоичный файл путём добавления символа b после символов r,w,a,r+,w+,a+. Например: "r+b","w+b".

t

Файл открывается текстовом режиме. Специфицируется текстовый файл путём добавления символа t после символов r,w,a,r+,w+,a+. Например: "r+t","wt".

printf("введите спецификацию файла");

scanf("%s",filename);

if((fp=fopen(filename,"wb"))==NULL)

perror("");

После завершения работы с файлом (файлами) его необходимо закрыть. Закрытие файла приводит к разрушению внутренней переменной, созданной по шаблону file. При этом, содержимое буфера переносится на диск и выполняется DOS - функция закрытия файла: происходит обновление директория - записывается новый размер файла и изменяется дата и время создания файла. Закрытие файла выполняется при помощи функции fclose().

int _RTLENTRY _EXPFUNC fclose(FILE * __stream);

Int fclose(FILE *fp); - закрывает поток ввода - вывода, на который указывает fp.В случае успеха возвращает 0, в противном случае возвращает eof.

В С - программе допускается одновременное открытие нескольких файлов. При необходимости допускается одновременное закрытие нескольких файлов, выполняемых функцией

int fcloseall(void);

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

int n;float *ga,sx,sy,max;

/*------------------------------------

void WritToD(void)

{ FILE *wfo;char *str;

clrscr();

printf (" Имя победителя?\n");

scanf( "%s",str);

wfo=fopen("E:\\rez.d","a");

fprintf(wfo,"%s-",str);

fprintf(wfo,"%f",max);

fprintf(wfo,"\n");

fclose(wfo);

main();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]