Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMarcellino Marrone Modificato 10 anni fa
1
1 Gestione dei File Corso di Informatica A Vito Perrone
2
Copyright © 2004 - The McGraw-Hill Companies, srl 2 Gestione File Informatica A – V. Perrone Indice Il file system in C Principali operazioni sui file (dalla Standard Library) Esempi
3
Copyright © 2004 - The McGraw-Hill Companies, srl 3 Gestione File Informatica A – V. Perrone Il file system in C Flusso di comunicazione: binario (sequenza di byte) di tipo testo (sequenza di caratteri) Modalità di utilizzo: Lettura, scrittura o lettura e scrittura; Posizione corrente: Punta al prossimo byte da leggere o scrivere sul file; Indicatore di errore; Indicatore di end-of-file (eof).
4
Copyright © 2004 - The McGraw-Hill Companies, srl 4 Gestione File Informatica A – V. Perrone Tabella file aperti nomefile: modouso: poscorr: …. nomefile: modouso: poscorr: …. nomefile: modouso: poscorr: …. nomefile: FileTre modouso: poscorr: …. nomefile: FileUno modouso: poscorr: …. nomefile: FileDue modouso: poscorr: …. Variabili puntatore stdin Tabella dei file aperti File StandardInput stdout stderr f1 f2 f3 StandardInput StandardError FileUno FileDue FileTre
5
Copyright © 2004 - The McGraw-Hill Companies, srl 5 Gestione File Informatica A – V. Perrone Operazioni di gestione dei file FILE*fopen (nomefile,modalità) intfclose (FILE*fp) intremove ( nomefile ) intrename (vecchionome,nuovonome) intferror (FILE*fp) intfeof (FILE*fp) voidclearerr (FILE*fp)
6
Copyright © 2004 - The McGraw-Hill Companies, srl 6 Gestione File Informatica A – V. Perrone Operazioni di lettura/scrittura int fprintf (FILE *fp, stringa di controllo, elementi) int fscanf (FILE *fp, stringa di controllo, indirizzo elementi) int getchar (void) int putchar (int c) int fgetc (FILE *fp) int fputc (int c, FILE *fp)
7
Copyright © 2004 - The McGraw-Hill Companies, srl 7 Gestione File Informatica A – V. Perrone /*Legge e mostra sul video il contenuto del file di testo filechar*/ #include /* Contiene la definizione di EOF, del tipo FILE e le testate delle funzioni che operano su file */ #include /* Contiene la definizione di NULL */ main() { FILE*fp; charc; if ((fp = fopen("filechar", "r")) != NULL) /* Il file viene aperto in lettura con modalità testo */ { while ((c = fgetc(fp)) != EOF) /* Viene letto e stampato un carattere per volta sino a fine file */ putchar(c); fclose(fp); } else printf("Il file non può essere aperto\n"); } Esempi con file di testo (1)
8
Copyright © 2004 - The McGraw-Hill Companies, srl 8 Gestione File Informatica A – V. Perrone /*Lettura e scrittura di stringhe (1)*/ #include #defineOK1 #defineERROR0 #defineMAXLINE100 int copiaselettiva(char refstr[]) { charline[MAXLINE]; FILE*fin, *fout; If ((fin = fopen("filein", "r")) == NULL) /* filein viene aperto in lettura con modalità testo */ return ERROR; if ((fout = fopen("fileout", "w")) == NULL) /* fileout viene aperto in scrittura con modalità testo */ { fclose(fin); return ERROR; } … Esempi con file di testo (2)
9
Copyright © 2004 - The McGraw-Hill Companies, srl 9 Gestione File Informatica A – V. Perrone /*Lettura e scrittura di stringhe (2)*/ … while (fgets(line,MAXLINE,fin) != NULL) /* fgets legge da filein al più MAXLINE–1 caratteri e assegna al vettore line i caratteri letti, incluso l'eventuale carattere di newline, e termina la stringa con il carattere \0 */ if (strstr (line,refstr) != NULL) /* La funzione strstr restituisce la posizione della prima occorrenza della stringa puntata da refstr nella stringa puntata da line; se la seconda stringa non è contenuta nella prima viene restituito il valore NULL */ fputs(line,fout); fclose(fin); fclose(fout); return OK; } Esempi con file di testo (3)
10
Copyright © 2004 - The McGraw-Hill Companies, srl 10 Gestione File Informatica A – V. Perrone Lettura e scrittura di strutture int fread(void *ptr, dimelemento, numelementi, FILE *fp); int fwrite(void *ptr, dimelemento, numelementi, FILE *fp);
11
Copyright © 2004 - The McGraw-Hill Companies, srl 11 Gestione File Informatica A – V. Perrone /*Gestione file Persone (1)*/ typedefstruct{charnome[20]; charcognome[20]; charindirizzo[50]; } Persona; typedefcharCodFisc[16]; typedefstruct{charnome[20]; charcognome[20]; charindirizzo[50]; CodFiscCodiceFiscale; } NuovaPersona; /* I file Persone, CodiciFiscali e Nuove Persone si suppongono aperti dal main. pp, cf e np fanno riferimento ai tre file in questione */ intAggiornaPersone (FILE *pp, FILE *cf, FILE *np) { PersonaPersonaCorrente; CodFiscCodFiscCorrente; NuovaPersonaNuovaPersonaCorrente; … Esempio con file binario (1)
12
Copyright © 2004 - The McGraw-Hill Companies, srl 12 Gestione File Informatica A – V. Perrone … /*Gestione file Persone (2)*/ rewind(pp); /* Rende possibile le seguenti operazioni di lettura e scrittura sul file identificato da pp, iniziando dal primo byte del file.*/ rewind(cf); rewind(np); while (fread(&PersonaCorrente,sizeof(Persona),1,pp) != 0) /* Finché non si è raggiunta la fine del file */ { fread(&CodFiscCorrente,sizeof(CodFisc),1,cf); strcpy(NuovaPersonaCorrente.nome, PersonaCorrente.nome); strcpy(NuovaPersonaCorrente.cognome,PersonaCorrente.cognome); strcpy(NuovaPersonaCorrente.indirizzo, PersonaCorrente.indirizzo); strcpy(NuovaPersonaCorrente.CodiceFiscale, CodFiscCorrente); fwrite(&NuovaPersonaCorrente,sizeof(NuovaPersona),1,np); } Esempio con file binario (2)
13
Copyright © 2004 - The McGraw-Hill Companies, srl 13 Gestione File Informatica A – V. Perrone Accesso diretto (1) int fseek(FILE *fp, long offset, int refpoint) –SEEK_SET : scostamento rispetto allinizio del file, –SEEK_CUR : scostamento rispetto alla posizione corrente, –SEEK_END : scostamento rispetto alla fine del file. long ftell(FILE *fp) rewind(f) equivale a: fseek (f, 0, SEEK_SET);
14
Copyright © 2004 - The McGraw-Hill Companies, srl 14 Gestione File Informatica A – V. Perrone /*Inversione del contenuto di un file numint di interi (1)*/... main () { FILE*f; long int inizio, fine; inttempi, tempf; unsigned intdim; if ((f = fopen ("numint", "rb+")) == NULL) { puts ("Non è stato possibile aprire il file numint"); /* più efficiente della printf per la stampa di un messaggio dato che non richiede la scansione e linterpretazione della stringa di controllo */ exit(1); /* La funzione exit provoca una conclusione non anomala del programma e la restituzione del controllo al sistema operativo */ } … Accesso diretto (2)
15
Copyright © 2004 - The McGraw-Hill Companies, srl 15 Gestione File Informatica A – V. Perrone /*Inversione del contenuto di un file numint di interi (2)*/... inizio = 0; dim = sizeof(int); fseek (f, –dim, SEEK_END); /* SEEK_END è una costante definita nel file stdio.h. Ha valore 2 */ fine = ftell (f); while (inizio < fine) { fseek (f, inizio, SEEK_SET); fread (&tempi, dim, 1, f); fseek (f, fine, SEEK_SET); fread (&tempf, dim, 1, f); /* È necessario riposizionarsi */ fseek (f, fine, SEEK_SET); fwrite (&tempi, dim, 1, f); fseek (f, inizio, SEEK_SET); fwrite (&tempf, dim, 1, f); inizio = inizio + dim; fine = fine – dim; } Accesso diretto (3)
16
Copyright © 2004 - The McGraw-Hill Companies, srl 16 Gestione File Informatica A – V. Perrone /* Programma ServizioVoli (1)*/ voidmain () { [dichiarazioni varie: esse dovranno definire le variabili necessarie per far riferimento ai file che memorizzano l'archivio, le varie funzioni destinate alla sua gestione in relazione alle operazioni richieste, le variabili e i tipi associati all'archivio e le variabili e tipi necessari per la realizzazione del menu] Fine = false; do { [RipulisciLoSchermo] puts ("\nSono disponibili le seguenti operazioni. Per selezionare un'operazione premere il tasto indicato alla destra dell'operazione e il carattere di Invio.\n"); /* Ricordiamo che puts inserisce dopo la stringa un newline ottenendo l'andata a capo */ puts ("Prenotazione volo: P"); puts ("Cancellazione di una prenotazione:C"); puts ("Inserimento in lista di attesa:A"); puts ("Fine operazioni:F"); Risposta = getchar (); … Programma Servizio Voli (1)
17
Copyright © 2004 - The McGraw-Hill Companies, srl 17 Gestione File Informatica A – V. Perrone /* Programma ServizioVoli (2)*/ … Risposta = getchar (); switch (Risposta) { case'P': ServiPrenotazioni(); break; case'C': ServiCancellazioni(); break; case'A': ServiListaAttesa(); break; case'F': Fine = true; break; } } while (Fine == false); [RipulisciLoSchermo] puts ("\n\n\nArrivederci\n"); } Programma Servizio Voli (2)
18
Copyright © 2004 - The McGraw-Hill Companies, srl 18 Gestione File Informatica A – V. Perrone /* Programma ServizioVoli (3)*/ #defineMAXPOSTI350 typedefstruct{charCognome[30]; charNome[30]; } Passeggero; typedefstruct{intNumVolo; charData[10]; Passeggero Prenotazioni[MAXPOSTI]; PasseggeroListaAttesa[100]; } DescrizioneVolo; Programma Servizio Voli (3)
19
Copyright © 2004 - The McGraw-Hill Companies, srl 19 Gestione File Informatica A – V. Perrone /* Programma ServizioVoli (4)*/ booleanFine; charRisposta; /* Puntatore al descrittore del file ArchivioVoli */ FILE*av; voidServiPrenotazioni (void); /* Esegue, se possibile, la prenotazione richiesta. In caso contrario, chiede automaticamente all'utente se desidera essere messo in lista di attesa. Se la risposta è positiva, chiama la funzione ServiListaAttesa senza bisogno di ritornare al menu principale. Dopo l'esecuzione della funzione ServiListaAttesa, termina anche la ServiPrenotazioni. L'esecuzione della funzione comporta l'interazione con l'utente attraverso un opportuno menu in cui vengono chiesti all'utente il numero e la data del volo desiderato, il cognome e il nome del passeggero. Dopo aver ottenuto i dati richiesti la funzione accede all'archivio e provvede alle necessarie operazioni di interrogazione e aggiornamento */ … Programma Servizio Voli (4)
20
Copyright © 2004 - The McGraw-Hill Companies, srl 20 Gestione File Informatica A – V. Perrone /* Programma ServizioVoli (5)*/ … voidServiCancellazioni (void); /* Vengono chiesti, tramite opportuno menu, i dati del passeggero e l'identificazione del volo al quale si intende rinunciare. Viene cancellato il passeggero dalla relativa lista. Inoltre, se la lista d'attesa del volo non è vuota, si estrae il suo primo elemento e lo si inserisce nella lista delle prenotazioni. Viene quindi scritto un messaggio sul terminale che avvisa l'operatore che un elemento della lista d'attesa ha ora la sua prenotazione confermata */ voidServiListaAttesa(void); /* Vengono chieste le solite informazioni e viene inserito il passeggero nella lista d'attesa desiderata */ Programma Servizio Voli (5)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.