fopen:
la fopen serve per aprire un file, funziona cosi:
*FILE = fopen("stringa_con_il_nome_del_file",metodo);
dove metodo puo' essere
codice:
"w" =Crea il file(se esiste lo sovrascrive),il puntatore si posiziona all'inizio
del file, e' possibile solo scrivere nel file, non leggere
"r" =Apre il file solo in lettura,il puntatore si posiziona all' inizio
"w+" =Crea il file(se esiste lo sovrascrive),il puntatore si posiziona all'inizio
del file,si puo scrivere e leggere
"r+" =Apre un file in lettura e scrittura,il puntatore si posiziona all' inizio
"a" =Apre il file in append.
"a+" =Apre il file in append e in lettura.
int fclose(*FILE);
chiude un file aperto mentre
long pos=fteel(*FILE)
restituisce la posizione nel file(in questo caso chiamata pos).
Per posizionare il puntatore a una determinata posizione si usa
int fseek(*FILE,long int offset,int a)
dove offset puo' essere un valore (con segno)rapresentante
i byte di spostamento e dove a deve essere
codice:
0 per spostarsi partendo dall' inizio del file
1 per spostarsi partendo dalla posizione corrente
2 per spostarsi partendo dalla fine del file
un valore di offset positivo spostera' il puntatore in avanti
contrariamente si spostera' in indietro.
codice:
fread(
*dove,
quanti_byte_spostare,
quante_volte_fare_la_fread,
*FILE_DESTINAZIONE
);
fwrite(
*da_dove,
quanti_byte_spostare,
quante_volte_fare_la_fwrite,
*FILE_SORGENTE
);
fwrite() ed fread vengono usate rispettivamente per leggere e per
scrivere n byte in un file. e' utile utilizzare l'operatore sizeof() che restituisce
la dimensione,ad esempio di una struttura,o di un tipo semplice..
esempio: ho la seguente struttura;
codice:
struct pippo {
int a;
int b;
};
e voglio salvarla in un file,dovrei
-innanzitutto sapere le specifiche del
compilatore per il tipo int
-i bit del sistema operativo (se 16 e' la meta'..)
-poi per una struttura piu' complessa dovrei fare alcuni calcoli..
fortunatamente esiste sizeof(struct pippo) che restituisce la dimensione!
quindi fread/fwrite avranno questa forma:
fread/fwrite(&struttura, quante_volte_la_salvo/copio, sizeof(struct pippo), destinazione/sorgente);
ricordo che e bene usarla anche con i tipi primitivi (es:sizeof(int))
cosi' il codice risultera' piu' portabile..
fprintf ed fscanf funzionano esattamente come la
printf e la scanf normali, solo che come primo parametro vogliono il file.
fprintf(file_destinazione,"stringa da scrivere eventuali valori:%d",eventuale_valore);
fscanf(file_sorgente,"%d%c",&intero,&carattere);
da notare che fprintf(stdout,""); ed fscanf(stdin,"");
sono l'equivalente di printf e scanf.
fgetc,fgets,fputc,fputs funzionano similmente alle getc,gets,putc,puts normali;
int fputc(int c,*FILE);
int fgetc(*FILE);
*char fgets(*char,DIMENSIONE,*File);
int fputs(costant *char,*FILE);
int fgets(,size*FILE);
feof(*FILE);
la feof restituisce VERO,TRUE,1 dopo che viene effettuata la lettura
oltre al file,quindi dopo che una lettura ha dato esito negativo.
ATTENZIONE: in Basic e' il contrario.