Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловыми потоками.doc
Скачиваний:
2
Добавлен:
10.07.2015
Размер:
101.38 Кб
Скачать

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

Операции ввода/вывода выполняются начиная с текущей позиции потока, определяемой положением (значением) указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия a ,a+) и изменяется автоматически после каждой операции ввода/вывода. Текущее положение указателя можно получить с помощью функций ftell и fgetpos и задать явным образом с помощью функций fseek, fsetpos и rewind. Эти функции нельзя использовать для стандартных потоков.

long int ftell(FILE *f);

Функция возвращает текущую позицию в файле, связанном с потоком f, как длинное целое. В случае ошибки она возвращает –1.

int fgetpos(FILE *f, fpos_t *pos);

Функция возвращает текущую позицию в файле, связанном с потоком f, и копирует значение по адресу pos. Это значение позднее может использоваться функцией fsetpos. Возвращаемое значение имеет тип fpos_t.

int fseek(FILE *f, long off, int org);

Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию off, отсчитываемую от значения org, которое должно быть равно одной из трех констант, определенных в <stdio.h>:

SEEK_CUR ( =1 )— от текущей позиции указателя;

SEEK_END ( =2 )— от конца файла;

SEEK_SET ( =0 )— от начала файла.

Функция возвращает 0, если указатель текущей позиции в файле успешно изменен, и отличное от 0 значение в противном случае.

int fsetpos(FILE *f, const fpos_t *pos);

Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию *pos, предварительно полученную с помощью функции fgetpos.

void rewind(FILE *f);

Функция очищает флаги ошибок в потоке f и устанавливает текущую позицию на начало файла.

Функции позиционирования позволяют провести вывод непосредственно после ввода, не закрывая файл. Для этого их записывают между функциями ввода и вывода. Однако рекомендуется всегда явным образом закрывать потоки, открытые для записи, чтобы избежать потери данных.

3.2 Работа со строками

Как и в ANSI С, для представления символьных строк в C++ не существует специального строкового типа. Вместо этого строки в C++ представляются как массивы элементов типа char, заканчивающиеся терминатором строки - символом с нулевым значением ('\0').

Объявление строкового массива

char St[7];

// Объявление и инициализация строки:

char St[] = "Строка";

// что равносильно:

char St[] = {'С','т','р','о','к','а','\0'};

Функции работы со строками

Большинство функций работы со строками содержится в библиотеке string.h.

1) Определение длины строк

Выполняется с помощью функции strlen () в заголовочном файле string.h. Синтаксис этой функции имеет вид:

size_t strlen(const char* string)

Данная функция в качестве единственного параметра принимает указатель на начало строки string, вычисляет количество символов строки и возвращает полученное беззнаковое целое число (size_t). Функция strlen () возвращает значение на единицу меньше, чем отводится под массив по причине резервирования места для символа '\0'.

Следующий фрагмент демонстрирует использование функции strlen ():

char St[] = "abcdef";

unsigned int i;

i = strlen(St);