2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso...
-
Upload
saverio-fadda -
Category
Documents
-
view
215 -
download
2
Transcript of 2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso...
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, l’apertura fallisce
Apre o crea un file in sola scrittura. Se esiste già, ne elimina il contenuto attuale e vi scrive dall’inizio
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, l’apertura fallisce
Crea un file in lettura e scrittura. Se il file esiste già, ne elimina il contenuto attuale e vi scrive dall’inizio
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);…