Salve, dovrei studiare queste due funzioni per l'accesso ad un file in modo casuale. Quel che ho letto afferma che la funzione seekp() è associato ad un puntatore del file 'system' di nome "put", dedicato all'output su file, mentre seekg() è associato ad un puntatore del file 'system' di nome "get", dedicato all'input su file. Ora io non ho perfettamente capito il concetto, ho anche cercato un po' qua e la ma non ne sono venuto a capo. Sul libro di studio mi è stato fatto un esempio, cioè:
codice:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
main()
{struct rec
{char c;
int x;
char s[10];
};
rec r;
clrscr();
ofstream out("set3",ios::out | ios::binary);
if(!out){cout<<"impossibile aprire il file";
return 1;
}
out.seekp(4*sizeof r,ios::beg);
cout<<"inseisci car";
cin>>r.c;
cout<<"ins num" ;
cin >>r.x;
cout<<"ins str ";
cin>>r.s;
out.write((unsigned char *) &r,sizeof r);
out.close();
rec r2;
ifstream in("set3",ios::in | ios::binary);
in.seekg(4*sizeof r2,ios::beg);
in.read((unsigned char *) &r2, sizeof r2);
cout<<"\n"<<r2.c;
cout<<"\n"<<r2.x;
cout<<"\n"<<r2.s;
in.close();
getch();
return 0;
}
Io non capisco. Creo un record con 3 campi, verifico se il file è stato creato ecc.. e poi:
codice:
out.seekp(4*sizeof r,ios::beg);
Non capisco esattamente cosa succede. Ho capito che il puntatore è stato spostato di 4 posizioni più avanti, quindi il record scriverà su file da quella determinata posizione. Ma non capisco se quella posizione è calcolata in record, o meglio, io stò scrivendo sul 4° record del tipo 'rec'? Perché l'esempio ha creato un solo record, ne dichiara uno solo:
Posso capire se avessi scritto:
In questo caso mi stò spostando al 4/10 record per scrivere li.
Ovviamente non sarà così, infatti vi chiedo un aiuto per comprendere meglio. Grazie infinite.