C Language Apri e scrivi su file


Esempio

#include <stdio.h>   /* for perror(), fopen(), fputs() and fclose() */
#include <stdlib.h>  /* for the EXIT_* macros */
 
int main(int argc, char **argv)
{
    int e = EXIT_SUCCESS;

    /* Get path from argument to main else default to output.txt */
    char *path = (argc > 1) ? argv[1] : "output.txt";

    /* Open file for writing and obtain file pointer */
    FILE *file = fopen(path, "w");
    
    /* Print error message and exit if fopen() failed */
    if (!file) 
    {
        perror(path);
        return EXIT_FAILURE;
    }

    /* Writes text to file. Unlike puts(), fputs() does not add a new-line. */
    if (fputs("Output in file.\n", file) == EOF)
    {
        perror(path);
        e = EXIT_FAILURE;
    }

    /* Close file */
    if (fclose(file)) 
    {
        perror(path);
        return EXIT_FAILURE;
    }
    return e;
}

Questo programma apre il file con il nome dato nell'argomento principale, per default su output.txt se non viene fornito alcun argomento. Se esiste già un file con lo stesso nome, il suo contenuto viene scartato e il file viene trattato come un nuovo file vuoto. Se i file non esistono già, la chiamata fopen() lo crea.

Se la chiamata fopen() fallisce per qualche motivo, restituisce un valore NULL e imposta il valore della variabile errno globale. Ciò significa che il programma può testare il valore restituito dopo la chiamata a fopen() e usare perror() se fopen() fallisce.

Se la chiamata fopen() positivo, restituisce un puntatore FILE valido. Questo puntatore può quindi essere utilizzato per fare riferimento a questo file finché non viene chiamato fclose() .

La funzione fputs() scrive il testo specificato nel file aperto, sostituendo qualsiasi contenuto precedente del file. Analogamente a fopen() , la funzione fputs() imposta anche il valore errno se fallisce, anche se in questo caso la funzione restituisce EOF per indicare il fail (altrimenti restituisce un valore non negativo).

La fclose() svuota tutti i buffer, chiude il file e libera la memoria indicata da FILE * . Il valore restituito indica il completamento proprio come fa fputs() (sebbene restituisca '0' se ha successo), anche in questo caso imposta nuovamente il valore errno nel caso di un errore.