01: // fgetc() e fputc()
02: // in questo esempio si sfruttano le operazioni di lettura/scrittura di un singolo byte per
03: // ricopiare il contenuto di un file in un secondo file (byte a byte)
04: // conto anche le operazioni di lettura/scrittura fatte
05: #include<stdio.h>
06: #include<stdlib.h>
07:
08: int main(int argc, char **argv){
09:
10: FILE *fileinput, *fileoutput; // definisco i puntatori alla struct FILE. Ne servono due: uno per il sorgente, l'altro per la destinazione
11: char nomefile[1000];
12:
13: printf("Inserisci il nome del file da ricopiare: ");
14: scanf("%s", nomefile);
15:
16: fileinput = fopen(nomefile, "r"); // apro il file in lettura
17: if(!fileinput)
18: {
19: perror("Non riesco ad aprire il file indicato");
20: exit(EXIT_FAILURE);
21: }
22:
23: printf("Inserisci il nome del file in cui vuoi ricopiare il contenuto del primo file: ");
24: scanf("%s", nomefile);
25:
26: fileoutput = fopen(nomefile, "w"); // apro il secondo file in scrittura (se esistente verra' azzerato!)
27: if(!fileoutput)
28: {
29: perror("Non riesco ad aprire il file indicato");
30: exit(EXIT_FAILURE);
31: }
32:
33: // leggo carattere per carattere il primo file e man mano che leggo scrivo nel secondo file
34: int c; // devo usare int per EOF
35: int i = 0; // lo uso per contare il numero di operazioni
36:
37: // int fgetc(FILE *stream);
38: while( (c = fgetc(fileinput)) != EOF) // fgetc() restituisce EOF se arriviamo alla fine del file oppure il codice ASCII del carattere letto
39: {
40: printf("Ho letto [%c]\n", c);
41: // int fputc(int c, FILE *stream);
42: fputc(c, fileoutput); // scrivo quanto letto nel secondo file
43: ++i;
44: }
45:
46: fclose(fileinput);
47: fclose(fileoutput);
48:
49: printf("Nel ricopiare il file ho fatto %d operazioni di lettura e scrittura\n", i);
50:
51: return 0;
52: }
53:
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it