C/Lettura e scrittura su file: differenze tra le versioni
< C
Contenuto cancellato Contenuto aggiunto
Riga 23: | Riga 23: | ||
</source> |
</source> |
||
Il parametro <tt>nomefile</tt> rappresenta il |
Il parametro <tt>nomefile</tt> rappresenta il percorso del file da aprire, mentre la {{IndexItem|fopen, modalità}}<tt>modalità</tt> è una delle seguenti: |
||
{| {{prettytable}} |
{| {{prettytable}} |
||
Riga 30: | Riga 30: | ||
|- |
|- |
||
|r |
|r |
||
| |
|file di testo in sola lettura. |
||
|- |
|- |
||
|w |
|w |
||
| |
|file di testo in sola scrittura. Se esiste ne è cancellato il contenuto altrimenti viene creato |
||
|- |
|- |
||
|r+ |
|r+ |
||
| |
|file di testo in lettura e scrittura. |
||
|- |
|- |
||
|w+ |
|w+ |
||
Riga 45: | Riga 45: | ||
|- |
|- |
||
|a+ |
|a+ |
||
|Come <tt>a</tt>, solo che è abilitata anche la lettura |
|Come <tt>a</tt>, solo che è abilitata anche la lettura. |
||
|- |
|- |
||
|b||se una b viene aggiunta alle modalità precedenti si indica che il file è binario. Ossia: |
|||
|rb |
|||
rb, wb, ab, e r+b, w+a, a+b equivalenti a rb+, wb+, ab+ |
|||
|- |
|||
|wb |
|||
|- |
|||
|ab |
|||
|- |
|||
|rb+ |
|||
|- |
|||
|wb+ |
|||
|- |
|||
|ab+ |
|||
|} |
|} |
||
Versione delle 15:10, 26 gen 2010
In C, ogni periferica, file, o dispositivo di memorizzazione è considerato uno stream: le funzioni per scrivere su qualunque dispositivo non cambiano. Per poter usufruire delle funzioni che permettono l'I/O su uno stream, è necessario includere la libreria standard stdio.
Le funzioni di I/O che analizzeremo saranno le seguenti:
- fopen
- getc
- putc
- fgets
- fputs
- fprintf
- fscanf
- fclose
- fflush
- fseek
- rewind
Apertura di un file
La funzione fopen serve per aprire un file ed ha il seguente prototipo:
FILE* fopen (const char *nomefile, const char *modalità);
Il parametro nomefile rappresenta il percorso del file da aprire, mentre la modalità è una delle seguenti:
Modalità | Significato |
---|---|
r | file di testo in sola lettura. |
w | file di testo in sola scrittura. Se esiste ne è cancellato il contenuto altrimenti viene creato |
r+ | file di testo in lettura e scrittura. |
w+ | Se il file non esiste, lo crea e lo apre in lettura e scrittura. Se esiste, lo cancella e lo apre in lettura e scrittura. |
a | Apre il file in sola scrittura, facendo in modo che si possa solo aggiungervi del contenuto, alla fine. Se il file non esiste, viene creato. |
a+ | Come a, solo che è abilitata anche la lettura. |
b | se una b viene aggiunta alle modalità precedenti si indica che il file è binario. Ossia:
rb, wb, ab, e r+b, w+a, a+b equivalenti a rb+, wb+, ab+ |
#include <stdio.h>
int main(void)
{
FILE *f = fopen("/Users/pietro/prova.txt", "r");
if(f != NULL)
printf("File letto con successo!");
else
{
printf("Errore nel leggere il file!");
exit(1);
}
fclose(f);
return 0;
}
Lettura
Lettura di un file:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *f = fopen(argv[1], "r");
if(f == NULL)
{
printf("Errore nel leggere il file!\n");
exit(1);
}
char str[80];
fgets(str, 1000000, f);
printf(str);
fclose(f);
return 0;
}
Scrittura
Questo programma prende l'input dell'utente e lo scrive su un dato file (sovrascrivendolo), fino a che non si digita un punto.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *f = fopen(argv[1], "w");
if (f == NULL)
{
printf("Impossibile scrivere sul file!\n");
exit(1);
}
char str[80];
while(strcmp(gets(str), "."))
fputs(str, f);
fclose(f);
return 0;
}