C/Lettura e scrittura su file: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
< C
Contenuto cancellato Contenuto aggiunto
Riga 23: Riga 23:
</source>
</source>


Il parametro <tt>nomefile</tt> rappresenta il path del file da aprire, mentre la {{IndexItem|fopen, modalità}}<tt>modalità</tt> è una delle seguenti:
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
|Sola lettura.
|file di testo in sola lettura.
|-
|-
|w
|w
|Se il file non esiste, lo crea e lo apre in sola scrittura. Se esiste, lo sovrascrive prima di aprirlo.
|file di testo in sola scrittura. Se esiste ne è cancellato il contenuto altrimenti viene creato
|-
|-
|r+
|r+
|Lettura e scrittura.
|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 in un punto qualsiasi del file.
|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

Indice del libro

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;
}