V datotekah z zaporednim dostopom lahko beremo samo zlog po zlog. Velikost in obliko zloga definira programer sam.
Preden datoteko želimo uporabiti, jo moramo odpreti. To storimo s klicem metode open, ali s pomočjo uporabe konstruktorja.
Primer:
ofstream izhodna_datoteka;
izhodna_datoteka.open("izhodna.dat");
ali
ofstream izhodna_datoteka("izhodna.dat");
Ko dostopa do datoteke ne potrebujemo več jo zapremo z ukazom:
izhodna_datoteka.close();
Privzeti argumenti konstruktorja in metode open() nastavijo drugi in tretji argument na privzete vrednosti. Če nam te ne ustrezajo, jih lahko spremenimo na naslednje vrednosti:
ios::in | odpremo datoteko za branje |
ios::out | odpremo datoteko za pisanje |
ios::ate |
odpremo datoteko za dodajanje (podatki se prvič dodajo na začetek datoteke, v naslednjih zapisovanjih pa na mesto, kamor kaže kazalec |
ios::app |
odpremo datoteko za dodajanje (podatki se zmeraj dodajajo na konec) |
ios::trunc |
pri odpiranju se najprej izbriše vsebina datoteke |
ios::nocreate |
odpiranje uspe samo, če datoteka že obstaja |
ios::noreplace |
odpiranje uspe samo, če datoteka še ne obstaja |
Za pozicioniranje kazalca uporabimo metode seekg ali seekp. Obe metodi imata isti pomen, le da je prva definirana za vhodne podatkovne tokove, druga pa za izhodne podatkovne tokove. Metoda ima dva parametra: prvi parameter pove število zlogov, za koliko se naj kazalec v datoteki premakne, drugi parameter pa pove , od kod se naj začne šteti pomik. Na voljo imamo naslednje možnosti:
Primera:
datoteka.seekg(0);
datoteka.seekg(20,ios::cur);
V naslednjih primerih bomo tvorili oz. izpisovali podatke iz datoteke oseb. Zapis datoteke je sestavljen iz priimka, številke računa in stanja na računu.
//Tvorjenje datoteke z zaporednim dostopom
#include <iostream>
#include <fstream.h>
#include <stdlib.h>
using namespace std;
int main()
{
ofstream izh_zbirka_strank("stranke.dat", ios::out);
if (!izh_zbirka_strank)
{
cerr << "Zbirke ni moc odpreti" << endl;
exit(1); // prototip v stdlib.h
}
cout << "Vnesi stevilko racuna, priimek in stanje." << endl << "Vnesi EOF za konec." << endl << "? ";
int racun;
char priimek[10];
float stanje;
while (cin >> racun >> priimek >> stanje) {
izh_zbirka_strank << racun << " " << priimek << " " << stanje << endl;
cout << "? ";
}
return 0;
}
//Izpis datoteke z zaporednim dostopom
#include <iostream>
#include <fstream.h>
#include <iomanip.h>
using namespace std;
void izpisi_vrsto(int rac, char *priimek, float sta)
{
cout << rac << ", " << priimek << ", " << sta << ", " << endl;
}
main()
{
ifstream vho_zbirka_strank("stranke.dat", ios::in);
if (!vho_zbirka_strank) {
cerr << "Zbirke ni moc odpreti" << endl;
exit(1);
}
int racun;
char priimek[10];
float stanje;
cout << "Racun, " << "Priimek, " << "Stanje" << endl;
while (vho_zbirka_strank >> racun >> priimek >> stanje)
izpisi_vrsto(racun, priimek, stanje);
return 0;
}