- •Файлы в языке с
- •Общие понятия
- •Стандартные библиотеки для работы с потоками
- •1.2. Работа с файлами (потоками)
- •1.2.1. Этапы работы с файлами (потоками)
- •1.2.2. Открытие файла (потока)
- •Закрытие файла (потока)
- •Удаление файла
- •1.3. Ввод/вывод в поток
- •1.3.1. Основные понятия
- •1.3.2. Позиционирование в файле
- •1.3.3. Функции задания положения указателя fseek и fsetpos
- •1.3.4.Функции чтения и записи потока байтов fread и fwrite
- •1.3.5. Функции чтения символа из потока (getс, fgetс, getchar)
- •1.3.6. Функции записи символа в поток (putc, fputc, putchar)
- •1.3.7. Функции чтения строки из потока (fgets, gets)
- •1.3.9. Функции форматированного ввода из потока (, scanf, sscanf)
- •1.3.10. Функции форматированного вывода в поток (fprintf, printf, sprintf)
- •1.4. Обработка ошибок
- •1.5. Пример обработки текстового файла
- •1.6. Пример обработки текстового и бинарного файла
1.3.3. Функции задания положения указателя fseek и fsetpos
Прототип функции fseek :
int fseek (File *f, long off, int org);
Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию off, отсчитываемую от значения org, которое должно быть равно одной из констант, определенных в <stdio.h>:
SEEK_CUR – от текущей позиции указателя (1);
SEEK_END – от конца файла (2);
SEEK_SET - от начала файла (0).
Параметр off задает количество байтов, на которое необходимо сместить указатель соответственно параметру org. Величина смещения может быть как положительной, так и отрицательной, но нельзя сместиться за пределы начала файла. Такой доступ к данным в файле называется произвольным.
Функция возвращает …
Прототип функции fsetpos :
int fsetpos (File *f, const fops_t *pos);
Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию *pos, предварительно полученную с помощью функции fgetpos.
Примечание. Функции fseek и fsetpos нельзя использовать для стандартных потоков.
Функция rewind очищает флаги ошибок при работе с потоками и переходит к началу файла. Ее прототип:
void rewind( File *f );
1.3.4.Функции чтения и записи потока байтов fread и fwrite
Прототип функции fread:
size_t fread (void *buffer, size_t size, size_t count, FILE *stream);
Функция считывает count элементов длиной size байтов в область, заданную указателем buffer, из потока stream. Возвращает количество прочитанных элементов, которое может быть меньше count, если при чтении произошла ошибка или встретился конец файла.
Прототип функции fwrite:
size_t fwrite (const void *p, size_t size, size_t, FILE *);
Функция записывает n элементов длиной size байтов из буфера, заданного указателем p, в поток f. Возвращает число записанных элементов.
1.3.5. Функции чтения символа из потока (getс, fgetс, getchar)
Функция getс, имеющая прототип:
int getc (FILE *f);
возвращает очередной символ в формате int из потока f. Если символ не может быть прочитан, то возвращает значение EOF.
Функция fgetс, имеющая прототип:
int fgetc (FILE *f);
возвращает очередной символ в формате int из потока f. Если символ не может быть прочитан, то возвращает значение EOF.
Функция getchar, имеющая прототип:
int getchar (void);
возвращает очередной символ в формате int из стандартного потока (stdin). Если символ не может быть прочитан, то возвращает значение EOF.
1.3.6. Функции записи символа в поток (putc, fputc, putchar)
Функция puts записывает символ ch в поток f. При ошибке возвращает значение EOF. Ее прототип:
int putc (int ch, FILE *f);
Выполняется аналогично функция fputc. Ее прототип:
int fputc (int ch, FILE *f);
Функция putchar выводит символ ch на стандартное устройство вывода, добавляя в конце символ новой строки. Возвращает неотрицательноу значение при успехе или EOF – при ошибке.
1.3.7. Функции чтения строки из потока (fgets, gets)
Прототип функции fgets:
char *fgets (char *s, int n, FILE *f);
Функция читает не более n-1 байт из потока f в строку s, прекращая чтение при обнаружении символа новой строки или конца файла. Символ новой строки при чтении не отбрасывается, помещается конец строки s. Прочитанная строка дополняется ограничителем строки ('\0'). При обнаружении ошибки или конца файла возвращает NULL, в противном случае – указатель на строку s.
Функция читает символы с клавиатуры до появления символа новой строки и помещает их в строку s. Сам символ новой строки в строку не включается. Возвращает указатель на s. Прототип функции gets:
char *gets (char *s);
1.3.8. Функции записи строки в поток (fputs, puts)
Прототип функции fputs:
int fputs (const char * s, FILE *f);
Функция fputs записывает строку символов s в поток f. Символ конца строки в файл не записывается. При ошибке возвращает значение EOF, иначе – неотрицательное число.
Функция puts выводит строку s на стандартное устройство вывода, добавляя в конце символ новой строки. Возвращает неотрицательное значение при успехе или EOF – при ошибке. Прототип функции puts:
int puts (char *s);