Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_Прог_1курс_2n1часть.doc
Скачиваний:
11
Добавлен:
13.04.2015
Размер:
735.74 Кб
Скачать

Ввод и вывод символов

Чтение символа из потока выполняется функцией

int fgetc(FILE *stream)

Запись символа в поток выполняется функцией

int fputc(int c, FILE *stream)

Обе функции возвращают код символа, а при ошибке возвращают EOF.

Чтение символа из стандартногопотока stdin выполняется функцией

int fgetchar(void)

Запись символа в стандартный поток stdout выполняется функцией

int fputchar(int c)

Пример.Скопировать файл xxx.bin в файл yyy.bin.

FILE *in = fopen ("c:\\xxx.bin", "rt");

FILE *out = fopen ("c:\\yyy.bin", "wt");

if (!in) return;

while (!feof(in))

fputc(fgetc(in), out);

fcloseall();

Ввод и вывод строк

Чтение строки из потока выполняется функцией

char *fgets(char *s, int n, FILE *stream)

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

Чтение прекращается, когда достигнут конец строки или прочитано n-1 символов из файла. Строка в буфере замыкается символами '\n' и нулевым. Указатель файла перемещается за символы CR-LF.

Запись строки в поток выполняется функцией

char *fputs(char *s, FILE *stream)

Функция возвращает указатель на последний записанный символ или EOF при ошибке. Терминальный символ строки не копируется.

Пример.Скопировать текстовый файл xxx.txt в файл yyy.txt по строкам.

const int n = 100;

char buf [n];

FILE *in = fopen("c:\\xxx.txt","r");

FILE *out = fopen("c:\\yyy.txt","w");

if (!in) return;

while (!feof(in)) {

fgets(buf, n, in);

fputs(buf, out);

}

fcloseall();

Ввод и вывод записей

Чтение записей из потока выполняется функцией

size_t fread(void *ptr, size_t size, size_t n, FILE *stream)

ptr - указатель на буфер в памяти, принимающий записи

size - размер записи в байтах

n - количество читаемых записей

Функция возвращает количество прочитанных записей, которое может быть и нулевым.

Замечание.Типsize_tопределен в файлеstdio.hкакunsignedint.

Вывод записей в поток выполняется функцией

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream)

ptr - указатель на буфер в памяти, содержащий записи;

size - размер записи в байтах;

n - количество выводимых записей.

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

Управление указателем файла

Чтение и запись выполняются в том месте файла, где находится указатель файла. Установить указатель можно функцией

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

offset - смещение указателя;

whence – способ отсчета смещения (в переводе whence означает «откуда» ).

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

Для указания точки отсчета смещения используют константы:

SEEK_SET — отсчет от начала файла;

SEEK_CUR — отсчет от текущей позиции указателя.

SEEK_END — отсчет от конца файла;

Функция

long ftell(FILE *stream)

возвращает текущую позицию указателя. При ошибке возвращает -1 и устанавливает глобальную переменную errno в ненулевое значение.

Замечание.Те же действия выполняются функциями fsetpos и fgetpos.

Пример.Определить длину файла xxx.bin.

FILE *in = fopen("c:\\xxx.bin","rb");

if (!in) return;

fseek(in, 0, SEEK_END); // ставим указатель в конец файла

cout << ftell(in); // определяем позицию указателя