2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso sequenziale I file ad accesso casuale Apre un file già esistente in sola lettura. Se il file non esiste, lapertura fallisce Apre o crea un file in sola scrittura. Se esiste già, ne elimina il contenuto attuale e vi scrive dallinizio Crea un file in sola scrittura. Se il file esiste già, vi scrive in accodamento, ovvero dalla fine del file Apre un file in lettura e scrittura. Se il file non esiste, lapertura fallisce Crea un file in lettura e scrittura. Se il file esiste già, ne elimina il contenuto attuale e vi scrive dallinizio Apre o crea un file in lettura e scrittura. Se esiste già, vi scrive in accodamento, ovvero dalla fine del file DescrizioneModo r w a r+ w+ a+
2000 Prentice Hall, Inc. All rights reserved. I file: apertura e chiusura Apertura e chiusura di un file in lettura … FILE *filePtr; if (( filePtr = fopen(esempio.dat", r") ) == NULL) printf( Il file non può essere aperto.\n" ); else{ … //Istruzioni per la lettura da file fclose(filePtr); } … Apertura e chiusura di un file in scrittura … FILE *filePtr; if (( filePtr = fopen(esempio.dat", w") ) == NULL) printf( Il file non può essere aperto.\n" ); else{ … //Istruzioni per la scrittura su file fclose(filePtr); } …
2000 Prentice Hall, Inc. All rights reserved. I file: accesso sequenziale Leggere e stampare i record di un file sequenziale … fscanf(filePtr, "%d%s%f", &account, name, &balance ); while ( !feof(filePtr) ){ printf("%d%s%f\n", account, name, balance); fscanf(filePtr, "%d%s%f", &account, name, &balance ); } … Acquisire dati e scriverli come record di un file sequenziale … scanf( "%d%s%f", &account, name, &balance ); while ( !feof(stdin) ){ fprintf(filePtr, "%d %s %f\n ", account, name, balance ); scanf("%d%s%f", &account, name, &balance); } … NOTA: con i file sequenziali fa testo il numero di caratteri occupati dai dati dei campi (a dimensione variabile) dei record
2000 Prentice Hall, Inc. All rights reserved. I file: accesso casuale (1/2) Leggere e stampare i record di un file ad accesso casuale … struct accountData{ int accNum; char accOwner[15]; float accBalance; } … struct accountData temp = {0,, 0.0} … fread(&temp, sizeof(struct accountData), 1, filePtr); printf("%d%s%f\n", temp.accNum, temp.accOwner, temp.accBalance); while ( !feof(filePtr) ){ fread(&temp, sizeof(struct accountData), 1, filePtr); printf("%d%s%f\n", temp.accNum, temp.accOwner, temp.accBalance); } … NOTA: con i file ad accesso casuale il numero di caratteri occupati dai dati dei campi del record non conta; i campi hanno tutti dimensione fissa, conta il numero di byte dei tipi
2000 Prentice Hall, Inc. All rights reserved. I file: accesso casuale (2/2) Acquisire dati e scriverli su un file ad accesso casuale … struct accountData{ int accNum; char accOwner[15]; float accBalance; } … struct accountData temp = {0,, 0.0} … scanf( "%d%s%f", &temp.accNum, temp.accOwner, &temp.accBalance ); while ( !feof(stdin) ){ fwrite(&temp, sizeof(struct accountData), 1, filePtr); scanf( "%d%s%f", &temp.accNum, temp.accOwner, &temp.accBalance ); } … Aggiornare un record in una posizione specifica index … int index = 15; fseek(filePtr, (index - 1) * sizeof(struct accountData), SEEK_SET); fwrite(&temp, sizeof(struct accountData), 1, filePtr); …