![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 461; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.255.206 (0.007 с.) |