| Časová náročnost: 8 minut |
V I/O systémech jazyka C++ přístup pomocí funkcí
seekg() a
seekp() s následujícími syntaxemi:
istream &seekg(off_type offset, seekdir origin);
ostream &seekp(off_type offset, seekdir origin);
off_type je typ integer definovaný
ios, který je schopen pojmout největší platnou hodnotu, kterou může
offset mít. Argument
seekdir je jedna z následujících hodnot:
|
- ios::beg - hledání od začátku
- ios::cur - hledání od současné pozice
- ios::end - hledání od konce
I/O systém jazyka C++ používá dva typy ukazatelů.
- get ukazatel - který ukazuje, kde v souboru dojde k další výstupní operaci
- put ukazatel - který ukazuje, kde v souboru dojde k další vstupní operaci
Obecně platí, že soubory, k nimž přistupujeme pomocí seekg() a seekp(), by měly být otevřeny pro binární operace.
Existují i přetížené verze funkcí seekg() a seekp(), které přesunují ukazatel na pozici vrácenou funkcemi tellg() a tellp(). Funkce tellg() a tellp() nám vrací aktuální hodnotu pozice daného ukazatele.
istream &seekg(pos_type position);
ostream &seekp(pos_type position);
pos_type je integer typ definovaný v ios, který je schopen uložit největší hodnotu, která definuje pozici v sobouru.
pos_type tellg();
pos_type tellp();
Následující program používá seekg() k nastavení ukazatele doprostřed souboru a pro zobrazení jeho obsahu. Jméno souboru a pozice jsou zadávány jako argumenty příkazového řádku.
|
| Příklad 8.4. |
|
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char ch;
if(argc!=3) {
cout << "Zadejte: 8_4 nazev_souboru pozice\n";
return 1;
}
ifstream in(argv[1], ios::in | ios::binary);
if(!in) {
cout << "Nelze otevrit soubor\n";
return 1;
}
in.seekg(atoi(argv[2]), ios::beg);
while(!in.eof()) {
in.get(ch);
cout << ch;
}
in.close();
return 0;
}
|