Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В системе ввода/вывода 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!