Добавил:
Помощь с лабораторными, контрольными практическими и курсовыми работами по: - Инженерной и компьютерной графике - Прикладной механике Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем 1 курс С++ / Экзамен / Lektsii_Kurakina_2_semestr.pdf
Скачиваний:
12
Добавлен:
08.08.2022
Размер:
4.82 Mб
Скачать

fputs(arr, file);

fputs("\n", file);

}

12.9 Функции позиционирования

void rewind (FILE * fptr);

Функция устанавливает индикатор позиции файла на начало файла.

Чтение и запись файла не обязательно осуществлять последовательно. Для перемещения указателя существует специальная функция:

int fseek (FILE * fptr, long num, int orign);

где long num – количество байт смещения от точки отсчёта для установки текущей позиции указателя, int orign – макрос определения точки отсчета, может принимать следующие значения (можно задавать условное обозначение или число):

SEEK SET 0 – от начала файла

SEEK CUR 1 – от текущей позиции файла

SEEK END 2

– от конца файла.

Если num – положительно перемещение указателя осуществляется от начала к концу файла, если отрицательно – наоборот.

Функция возвращает 0, если позиционирование прошло успешно, 1 – если произошла ошибка. При этом не контролируется выход за границу файла.

Функция уничтожение файла:

int remove.(char *filename);

Возвращает 0 – при успехе, < >0 – ошибка

Функция определения ошибок:

int ferror(FILE *fptr);

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

Чтение из двоичного файла и запись в него

12.10 Чтение из двоичного файла и запись в него

С файлом можно работать не как с последовательностью символов, а как с последовательностью байтов. В принципе, с нетекстовыми файлами работать по-другому не возможно. Однако так можно читать и писать и в текстовые файлы. Преимущество такого способа доступа к файлу заключается в скорости чтения-записи: за одно обращение можно считать/записать существенный блок информации.

При открытии файла для двоичного доступа, вторым параметром функции fopen() является строка "rb" или "wb".

Функции fread() и fwrite() принимают в качестве параметров:

·адрес области памяти, куда данные записываются или откуда считываются,

·размер одного данного какого-либо типа,

·количество считываемых данных указанного размера,

·файловый указатель.

Эти функции возвращают количество успешно прочитанных или записанных данных. Т.е. можно "заказать" считывание 50 элементов данных, а получить только 10. Ошибки при этом не возникнет.

Пример использования функций fread() и fwrite():

#include <stdio.h>

#include <string.h>

main () {

FILE *file;

char shelf1[50], shelf2[100];

int n, m;

file = fopen("shelf1.txt", "rb");

n=fread(shelf1, sizeof(char), 50, file);

fclose(file);

file = fopen("shelf2.txt", "rb");

m=fread(shelf2, sizeof(char), 50, file);

fclose(file);

shelf1[n] = '\0';

shelf2[m] = '\n';

shelf2[m+1] = '\0';

file = fopen("shop.txt", "wb");

fwrite(strcat(shelf2,shelf1), sizeof(char), n+m, file);

fclose(file); }

Здесь осуществляется попытка чтения из первого файла 50-ти символов. В n сохраняется количество реально считанных символов. Значение n может быть равно 50 или меньше. Данные помещаются в строку. То же самое происходит со вторым файлом. Далее первая строка присоединяется ко второй, и данные сбрасываются в третий файл.

Соседние файлы в папке Экзамен