E' da un bel po' che non scrivo in questa sezione...Comunque, scrivo questo post per far conoscere ( a chi ancora non le conoscesse ) tre delle tante funzioni fondamentali per "operare" sui files. La prima è fopen, la seconda è fseek e la terza è ftell. Queste tre funzioni si trovano nel file di intestazione stdio.h, l'header fondamentale per scrivere anche il più banale programma in C. Il prototipo di queste tre funzioni è il seguente :
prototipo fopen() : FILE *fopen ( char *filename , char *open_mode );
dove filename ( puntatore ) è il nome del file da aprire e open_mode ( anche questo è un puntatore ) è la modalità di apertura del file :
r - Apre un file in lettura ( read )
w - Crea un file di testo in scrittura ( write )
a - Apre un file in modalità append
rb - Apre un file binario in lettura ( readbinary )
wb - Crea un file binario in scrittura ( writebinary )
ab - Apre un file binario in modalità append ( appendbinary )
r+ - Apre un file in lettura/scrittura
w+ - Crea un file di testo in lettura/scrittura
a+ - Crea o apre un file di testo in modalità append per lettura/scrittura
r+b - Apre un file binario in lettura/scrittura
w+b - Crea un file binario in lettura/scrittura
a+b - Crea o apre un file binario in modalità append per lettura/scrittura
Se non aveste capito leggete ->
prototipo fseek() : int fseek(FILE *stream, long offset, int whence);
dove stream ( puntatore ) è il flusso di dati ( il file, in poche parole ), offset è il punto da cui iniziare la ricerca ( seek ) e whence è una costante che varia per l'inizio del file ( SEEK_SET ), per la posizione corrente del puntatore del file ( SEEK_CUR ) o per la fine del file ( SEEK_END ). Questa funzione restituisce 0 se l'oerazione di ricerca è avvenuta correttamente, altrimenti -1. Per capire meglio : offset e whence possono essere considerati degli intervalli, ciò significa che se il valore di offset dovesse essere 0 e quello di whence fosse SEEK_END significa che il file verrà letto dall'inizio fino alla fine.
Se non aveste capito leggete ->
prototipo ftell() : long ftell(FILE *stream);
dove stream ( puntatore ) è il flusso di dati del quale si vuole ottenere l'indicatore di posizione.
Se non aveste capito leggete ->
A proposito di questo ho scritto un programma ( commentato ) con queste tre funzioni che prende in input un file di testo scelto dall'utente e ne restituisce la grandezza :
NB1 : Il programma è stato scritto con Visual Studio e come file di intestazione principale c'è stdafx ( non esiste nel C ANSI ) il quale racchiunde le funzioni del file di intestazione stdio.h.
NB2 : Inizialmente ho parlato di "prototipo di funzione" ma in realtà non ho spiegato cos'è. Nel caso in cui qualcuno non lo sapesse, un prototipo di funzione non è altro che la rappresentazione della funzione stessa. Mi spiego meglio : non è necessario scrivere il prototipo di una funzione scritta personalmente dal programmatore ( è buona norma farlo, ma non è necessario; io consiglio di farlo ). Essa serve quando ( in fase di compilazione ) il compilatore va a controllare il tipo di dato restituito ( se questa ne restituisce ), il numero dei parametri che la funzione si aspetta di ricervere e l'ordine di quest'ultimi. Nelle versioni precedenti del C questo controllo non avveniva ( l'utilizzo del prototipo delle funzioni venne preso dal C++ ) di conseguenza il compilatore non poteva individuare degli errori, i quali in fase di esecuzione del programma, avrebbero causato errori fatali dal punto di vista logico+
prototipo fopen() : FILE *fopen ( char *filename , char *open_mode );
dove filename ( puntatore ) è il nome del file da aprire e open_mode ( anche questo è un puntatore ) è la modalità di apertura del file :
r - Apre un file in lettura ( read )
w - Crea un file di testo in scrittura ( write )
a - Apre un file in modalità append
rb - Apre un file binario in lettura ( readbinary )
wb - Crea un file binario in scrittura ( writebinary )
ab - Apre un file binario in modalità append ( appendbinary )
r+ - Apre un file in lettura/scrittura
w+ - Crea un file di testo in lettura/scrittura
a+ - Crea o apre un file di testo in modalità append per lettura/scrittura
r+b - Apre un file binario in lettura/scrittura
w+b - Crea un file binario in lettura/scrittura
a+b - Crea o apre un file binario in modalità append per lettura/scrittura
Se non aveste capito leggete ->
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
prototipo fseek() : int fseek(FILE *stream, long offset, int whence);
dove stream ( puntatore ) è il flusso di dati ( il file, in poche parole ), offset è il punto da cui iniziare la ricerca ( seek ) e whence è una costante che varia per l'inizio del file ( SEEK_SET ), per la posizione corrente del puntatore del file ( SEEK_CUR ) o per la fine del file ( SEEK_END ). Questa funzione restituisce 0 se l'oerazione di ricerca è avvenuta correttamente, altrimenti -1. Per capire meglio : offset e whence possono essere considerati degli intervalli, ciò significa che se il valore di offset dovesse essere 0 e quello di whence fosse SEEK_END significa che il file verrà letto dall'inizio fino alla fine.
Se non aveste capito leggete ->
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
prototipo ftell() : long ftell(FILE *stream);
dove stream ( puntatore ) è il flusso di dati del quale si vuole ottenere l'indicatore di posizione.
Se non aveste capito leggete ->
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
A proposito di questo ho scritto un programma ( commentato ) con queste tre funzioni che prende in input un file di testo scelto dall'utente e ne restituisce la grandezza :
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
NB1 : Il programma è stato scritto con Visual Studio e come file di intestazione principale c'è stdafx ( non esiste nel C ANSI ) il quale racchiunde le funzioni del file di intestazione stdio.h.
NB2 : Inizialmente ho parlato di "prototipo di funzione" ma in realtà non ho spiegato cos'è. Nel caso in cui qualcuno non lo sapesse, un prototipo di funzione non è altro che la rappresentazione della funzione stessa. Mi spiego meglio : non è necessario scrivere il prototipo di una funzione scritta personalmente dal programmatore ( è buona norma farlo, ma non è necessario; io consiglio di farlo ). Essa serve quando ( in fase di compilazione ) il compilatore va a controllare il tipo di dato restituito ( se questa ne restituisce ), il numero dei parametri che la funzione si aspetta di ricervere e l'ordine di quest'ultimi. Nelle versioni precedenti del C questo controllo non avveniva ( l'utilizzo del prototipo delle funzioni venne preso dal C++ ) di conseguenza il compilatore non poteva individuare degli errori, i quali in fase di esecuzione del programma, avrebbero causato errori fatali dal punto di vista logico+