Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Произвольный доступ к файлам.Содержание книги
Поиск на нашем сайте
То место в файле, куда записываются данные или откуда они извлекаются, определяется значением указателя записи-чтения файла (текущим указателем файла). При последовательном доступе к файлу этот указатель позиционируется автоматически при любой операции чтения и записи. Для прямого управления положением указателя записи-чтения наиболее часто используются функции rewind() и fseek(). Передвинув с их помощью указатель в нужное место, можно читать информацию из файла или записывать её в файл в произвольном порядке.
Функция rewind().
Прототип: void rewind(FILE *_stream);
Описание: Помещает текущий указатель позиции файла на начало файла и сбрасывает индикаторы ошибок и конца файла. Функцияrewind(stream) эквивалентна fseek(stream, 0L, SEEK_SET) (см. далее), за исключением того, что rewind() обнуляет признаки конца файла и ошибки, в то время как fseek() обнуляет только признак конца файла. Функция fseek().
Прототип: int fseek(FILE *_fp, long _offset, int _from);
Описание: Функция fseek() устанавливает текущий указатель файла, соответствующий потоку _fp, в новую позицию, которая расположена по смещению _ offset относительно места в файле, определяемого параметром _from. Параметр _from может иметь одно из трех значений 0, 1 или 2, которые представлены тремя символическими константами:
#define SEEK_CUR 1 #define SEEK_END 2 #define SEEK_SET 0
Эти константы могут быть переданы функции fseek() для запроса позиционирования текущего указателя относительно текущей позиции в файле либо конца или начала файла соответственно. Очевидно, что при использовании SEEK_END (2) значение _ offset должно быть меньшн нуля. В этом случае будет выполняться сдвиг указателя от конца к началу файла. Функция fseek() используется с операциями ввода/вывода в поток. После этой операции можно производить как ввод, так и вывод в поток.
Возвращаемое значение: Функция fseek() возвращает значение 0, если указатель файла успешно перемещен, и ненулевое значение в случае неудачного завершения.
Пример: fseek(fp, 100L, SEEK_SET);
Для определения текущей позиции указателя в файле служит функция ftell(). Прототип: long ftell(FILE *_fp);
Описание: Функция ftell() возвращает положение указателя текущей позиции файла, связанного с потоком _fp. Значение выдается в виде смещения в байтах относительно начала файла. Значение, возвращаемое ftell(), можно в дальнейшем использовать при вызове функции fseek().
Возвращаемое значение: Функция ftell() возвращает положение указателя текущей позиции при успешном завершении. При ошибке возвращает -1L, и присваивает переменной errno положительное значение.
Пример: fseek(fp, 0L, 2); //в конец файла long k = ftell(fp); //длина файла в байтах
Задача 168. Программа печатает произвольный текстовый файл в прямом, а затем в обратном порядке, трактуя его как бинарный файл. // f_revrs2.cpp печать файла в обратном порядке // произвольный доступ бинарные файлы
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std;
#define CTRL_Z '\32' FILE *in; int main() { char namein[15], ch; long count,last; system("chcp 1251"); printf("Введите путь и имя файла,например,D:\\eddy.txt\n"); gets(namein); if((in = fopen(namein, "rb"))==NULL) //двоичный для чтения { puts("Не могу открыть файл...!"); _getch(); exit(0); }
fseek(in,0L,SEEK_END); //переход к концу файла last=ftell(in); //размер файла //печать файла в прямом порядке for(count=0L;count<last;count++) { fseek(in,count,SEEK_SET); ///движение вперед ch=getc(in); if(ch!=CTRL_Z && ch!= '\r') putchar(ch); } //печать файла в обратном порядке for(count=1L;count<=last;count++) { fseek(in,-count,SEEK_END); ///движение назад ch=getc(in); if(ch!=CTRL_Z && ch!= '\r')//в двоичном коде Ctrl+z //-обычный символ, а реальный конец файла следует за ним //\r-аналогично - их не печатать putchar(ch); } fclose (in);_getch(); return 0; }
Задача 169. Программа создает файл–телефонный справочник некоторой телефонной станции Одессы(например, АТС-765).Каждая запись содержит поля: -номер телефона; -Фамилия абонента; -адрес абонента.
|
||||
Последнее изменение этой страницы: 2016-12-16; просмотров: 452; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.190.253.224 (0.006 с.) |