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

Лабораторная работа № 7 Файловый ввод/вывод

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

1. Файловый ввод/вывод с помощью потоков в стиле с

Классический подход, принятый в С, заключается в том, что информация о потоке (файле) заносится в структуру типа FILE, определенную в файле stdio.h, который необходимо подключать с помощью директивы #include.

Файл открывается с помощью функции fopen, которая возвращает указатель на структуру типа FILE. Синтаксис:

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

где filename – имя файла, mode – строка, определяющая режим открытия, которая может содержать спецификаторы, указанные в Табл. 1.

Таблица 1.

Спецификаторы режимов открытия файла

Спецификатор

Значение

r

Открыть файл только для чтения

r+

Открыть для чтения и записи

a

Открыть или создать файл для записи данных в конец файла

a+

Открыть или создать файл для чтения или записи данных в конец файла

w

Открыть файл для записи

w+

Открыть файл для чтения и записи

t

Текстовый файл

b

Бинарный (двоичный) файл

Спецификаторы “t” и “b” добавляются к другим спецификаторам в конце или перед «+», например, rt, rb, rt+ и т.д.

Открываемый файл буферизируется, т.е. обмен информацией происходит не непосредственно с файлом, а с буфером в оперативной памяти. Информация переписывается в файл только при переполнении буфера или при закрытии файла. После окончания работы с файлом необходимо вызвать функцию fclose(FILE *), в которую передается указатель потока.

    1. Текстовые файлы

Основные функции для работы с текстовыми файлами представлены в Табл.2.

Таблица 2

Основные функции для работы с текстовыми файлами

Функция

Синтаксис

Примеры

fopen

Открыть файл

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

FILE* F1,*F2;

F1=fopen(“Text.txt”,”rt”); // Только чтение

F2=fopen(“Text.txt”,”rt+”); // Чтение и запись

fseek

Установка позиции в файле

int fseek(FILE *stream, long offset, int whence);

Устанавливается позиция в файле, отстоящая на offset байт от позиции, указанной whence:

SEEK_SET 0 Начало файла

SEEK_CUR 1 Текущая позиция

SEEK_END 2 Конец файла

fseek(stream, 0, SEEK_SET); // Начало файла

feof

Проверка окончания файла

int feof(FILE *stream);

Возвращает ненулевое значение, если прочитан символ конца файла

if(feof(F1)) break;

fgets

Считать строку

char* fgets(char * s, int n, FILE *f);

(s – указатель на буфер, в который читается строка; n – число читаемых символов)

char s[80];

fgets(s, 80, F1); // Читать 80 символов в буфер s из файла F1

getc

Чтение символа из файла

int getc (FILE *stream);

char ch;

ch = getc(F1); // Прочитать 1 символ из F1

ftell

Вернуть текущую позицию в файле

long int ftell(FILE *stream);

long int pos;

pos=ftell (F1);

fscanf

Чтение форматированных данных

int fscanf(FILE *stream, const char *format[, address, ...]);

format – строка форматирования данных, см. Табл.3.

int i;

fscanf (F1, “%d”, &i);

// Прочитать целое число в переменную i из потока F1

int a,b;

double d;

fseek(F1, 0, SEEK_SET);

fscanf(F1,”%d %d %le”, &a, &b, &d);

putc

Запись символа в поток

int putc(int c, FILE *stream);

Символ с записывается в поток stream. Если запись успешна, возвращает символ с, иначе – EOF (символ конца файла)

char ch=’h’;

putc (ch,F1); // Поместить символ “h” в поток F1

fputs

Запись строки в поток

int fputs(const char *s, FILE *stream);

char *str;

str=”New string \n”;

fputs(str, F1);

fprintf

Запись форматированных данных

int fprintf(FILE *stream, const char *format[, argument, ...]);

format – строка форматирования данных, см. Табл.3.

int i = 100;

char c = ‘C’;

float f = 1.234;

fprintf(F1, “%d %c %f”, i, c, f);

fclose

Закрыть файл

int fclose(FILE *stream);

fclose(F1);

Таблица 3

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