Copia di un file

Questo esercizio consiste nella copiatura di un file di testo in un file di altro nome. Il nome del vecchio file, e del nuovo, devono essere passati come argomenti al programma.

Il programma finale copia.c è riportato qui sotto. Dopo aver controllato che al programma siano stati effettivamente passati due argomenti vengono aperti i cui nomi sono il primo e il secondo argomento che il programma ha ricevuto.

Un particolarità di questo programma è che il file da scrivere viene prima aperto in lettura. Se il file già esiste questa apertura non genera errori. In questo modo, è possibile verificare la esistenza del file prima di scrivere: se il risultato della fopen è diverso da NULL allora il file esiste già, per cui si può terminare il programma senza cancellare il contenuto del vecchio file.

/*
  Copia un file: sorgente e destinazione sono
passati come argomenti.
*/

#include<stdlib.h>
#include<stdio.h>

int main(int argn, char *argv[]) {
  char buf[200];
  FILE *in, *out;
  int res;


		/* controllo numero di argomenti */
  if( argn-1<2 ) {
    printf("Mancano gli argomenti\n");
    exit(1);
  }


		/* apre il file da leggere */
  in=fopen(argv[1], "r");
  if( in==NULL ) {
    perror("Errore in apertura del file da leggere");
    exit(1);
  }


		/* controlla se il file da scrivere esiste */
  out=fopen(argv[2], "r");
  if( out!=NULL ) {
    printf("Il file da scrivere esiste gia'\n");
    exit(1);
  }
  /* nota: se out==NULL allora non si *deve* fare fclose */


		/* apre il file da scrivere */
  out=fopen(argv[2], "w");
  if( out==NULL ) {
    perror("Errore in apertura del file da scrivere");
    exit(1);
  }


		/* legge e scrive ogni riga */
  while(1) {
    fgets(buf, 200, in);
    if( feof(in) )
      break;
    fputs(buf, out);
  }


		/* chiude i file */
  fclose(in);
  fclose(out);

  return 0;
}