Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Произвольный доступ



В системе ввода/вывода C++ произвольный доступ (random access) реализуется с помощью функций seekg() и seekp(). Здесь показаны их наиболее общие формы;

istream &seekg(streamoff offset, seek_dir origin);

ostream &seekp(streamoff offset, seek_dir origin);

Здесь streamoff — это заданный в iostream.h тип, который способен хранить наибольшее возможное значение offset. Кроме этого, перечисление seek_dir содержит следующие значения:

Значение Содержание
ios::beg Отсчет от начала файла
ios::curr Отсчет от текущей позиции в файле
ios::end Отсчет от конца файла

Система ввода/вывода C++ управляет двумя указателями, связанными с файлом. Первый — это указатель считывания (get pointer), который задает следующее место в файле, откуда будет вводиться информация. Второй — это указатель записи (put pointer), который задает следующее место в файле, куда будет выводиться информация. При каждом вводе или выводе соответствующий указатель последовательно продвигается дальше. Однако, используя функции seekg() и seekp(), возможен произвольный доступ к файлу.

Функция seekg() устанавливает указатель считывания соответствующего файла в позицию, отстоящую на величину offset от заданного места origin. Функция seekp() устанавливает указатель записи соответствующего файла в позицию, отстоящую на величину offset от заданного места origin.

Определить текущую позицию каждого указателя можно с помощью функций:

streampos tellg();

streampos tellp();

Здесь streampos — это заданный в iostream.h тип, способный хранить наибольшее значение, которое могут вернуть функции.

Примеры:

1. В следующей программе показана работа функции seekp(). Она позволяет заменить в файле заданный символ. Задайте в командной строке имя файла, затем номер байта в файле, который вы хотите изменить, и, наконец, новый символ для замены. Обратите внимание, файл открывается для чтения и записи.

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

main(int argc, char *argv[ ]

{ if(argc!= 4)

{ cout << "Использование: CHANGE <файл> <t,av.

return 1;

}

fstream out (argv [1], ios:: in | ios:: out);

if(!out)

{ cout << "Файл открыть невозможно\n.";

return 1;

}

out.seekp(atoi(argv[2]), ios::beg)

out.put(*argv[3]);

out.close();

return 0;

}

2. В следующей программе функция seekg() используется для установки указателя считывания в заданную позицию внутри файла для вывода содержимого файла, начиная с этой позиции. Имя файла и позиция начала считывания задается в командной строке.

// Демонстрация работы функции seekg ()

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

main(int argc, char *argv[ ])

{ char ch;

if(argc!=3)

{ cout << "Использование: LOCATE <файл> <позииия>\п";

return 1;

}

ifstream in(argv[l]);

if(!in)

{ cout << "Файл открыть невозможно\n”;

return 1;

}

in.seekg (atoi(argv [2],ios::beg);

while (! in.eof ())

{ in.get (ch);

cout << ch;

}

in.close ();

return 0;

}





Дата публикования: 2015-02-22; Прочитано: 294 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...