Gestione dei file in C
|
|
|
- Romina Zani
- 7 anni fa
- Visualizzazioni
Transcript
1 Gestione dei file in C Fondamenti di Informatica
2 Che cos è un file e a cosa serve?
3 Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente presente in un calcolatore. q Si differenzia dalla memoria centrale nei seguenti aspetti: dimensioni e costo persistenza prestazioni q I file sono lo strumento che consente di memorizzare delle informazioni nella memoria di massa del calcolatore.
4 File come flussi q Un flusso (stream) di dati è un meccanismo i cui principali usi sono: lo scambio di dati con le periferiche (es. terminale, stampanti, etc.); lettura e scrittura dei dati memorizzati sul disco fisso. q In C i file sono quindi rappresentati come flussi e vengono fornite diverse funzionalità nella libreria stdio.h per la loro gestione: il flusso di informazione può essere testuale (flusso di caratteri) o binario (flusso di byte); consente di avere file ad accesso sequenziale e ad accesso diretto (o casuale).
5 Lavorare con i file in C
6 Apertura e chiusura di un file q Per poter utilizzare un file in un programma C è prima necessario aprirlo: FILE *fopen(nomefile, modalità) nomefile è il nome del file da aprire (incluso il path) modalità è una stringa che serve a specificare come verrà utilizzato il file la funzione ritorna un puntatore di tipo FILE, una particolare struttura dati che consente di tenere traccia dell ultima posizione letta/scritta nel file, del suo stato, etc; se l operazione non ha successo, viene ritornato NULL.
7 Apertura e chiusura di un file (2) q Modalità di apertura di un file: Modalità r w a rb wb ab r+ w+ rb+ wb+ Significato Apre un file testuale in lettura Crea un file testuale in scrittura Apre o crea un file testuale e si posiziona alla fine del file Apre un file binario in lettura Crea un file binario in scrittura Apre o crea un file binario e si posiziona alla fine del file Apre un file testuale in lettura/scrittura Crea un file testuale in lettura/scrittura Apre un file binario in lettura/scrittura Crea un file binario in lettura/scrittura
8 Apertura e chiusura di un file (3) q Una volta utilizzato un file in un programma, è necessario chiuderlo: int fclose(file *fp) fp è il puntatore al file da chiudere la funzione ritorna 0 se l operazione viene eseguita correttamente, altrimenti la funzione restituisce un valore speciale EOF definito in stdio.h (che viene generalmente utilizzato come carattere terminatore di un file).
9 Operazioni di lettura e scrittura q Le operazioni di lettura e scrittura su file possono essere effettuate in quattro modi diversi: precisando il formato dei dati in ingresso e in uscita accedendo ai dati carattere per carattere linea per linea blocco per blocco q Generalmente si adotta l accesso linea per linea nel caso di flussi di testo e l accesso carattere per carattere o blocco per blocco in presenza di flussi binari
10 Lettura e scrittura formattata q Le funzioni fprintf e fscanf consentono operazioni formattate analoghe a quelle di scanf e printf q Restituiscono il numero degli elementi effettivamente letti o stampati o restituiscono un numero negativo in caso di errore int fprintf(fp, str_controllo, ) int fscanf(fp, str_controllo, ) fp è il puntatore al file dal quale leggere o dove scrivere, gli argomenti successivi sono analoghi a quelli usati con scanf e printf le funzioni restituiscono l effettivo numero di elementi letti (fscanf) o di caratteri scritti (fprintf)
11 Lettura e scrittura di caratteri q Lettura di un carattere int fgetc (FILE *fp) riceve come argomento il file da cui leggere restituisce il codice del carattere letto o EOF in caso di errore q Scrittura di un carattere int fputc (int c, FILE *fp) riceve come argomenti il codice del carattere da scrivere e il file su cui scrivere restituisce il codice del carattere scritto o EOF in caso di errore
12 Esempio #include <stdio.h> int main() { } FILE *fp; char c; if ((fp = fopen( car.txt", "r"))!= NULL) { } while ((c = fgetc(fp))!= EOF) printf( ***%c***\n,c); fclose(fp); else printf("il file non può essere aperto\n"); return 0;
13 Lettura e scrittura di stringhe q Lettura di una stringa char *fgets (char *s, int n, FILE *fp) legge dal file puntato da fp fino a n-1 caratteri (si interrompe nel caso raggiunga prima il carattere \n o la fine del file) e mette i caratteri letti nella stringa s (aggiungendo il carattere terminatore \0); La funzione restituisce l indirizzo di s se ha successo o NULL in caso di errore. q Scrittura di una stringa int fputs (char *s, FILE *fp) scrive nel file puntato da fp il contenuto della stringa s (fino a raggiungere il carattere terminatore \0); restituisce 0 in caso l operazione abbia avuto successo.
14 Esempio #include <stdio.h> #include <strings.h> #define MAXLINE 1000 int copiaselettiva(char refstr[], char in[], char out[]) { char line[maxline]; FILE *fin, *fout; } if ((fin = fopen(in, "r")) == NULL) return -1; if ((fout = fopen(out, "w")) == NULL) { fclose(fin); return -1; } while (fgets(line,maxline,fin)!= NULL) if (strstr (line,refstr)!= NULL) fputs(line,fout); fclose(fin); fclose(fout); return 0;
15 Operazioni di gestione degli errori q int ferror(file *fp) Controlla se è stato commesso un errore nella precedente operazione di lettura o scrittura Restituisce 0 se nessun errore è stato commesso, un valore diverso da 0 in caso contrario q int feof(file *fp) Controlla se è stata raggiunta la fine del file nella precedente operazione di lettura o scrittura Restituisce 0 se la condizione di fine file non è stata raggiunta, un valore diverso da 0 in caso contrario
16 Lettura e scrittura per blocchi q int fread(ptr, dim, num, FILE *fp) legge al più num*dim byte di dati binari o testuali dal file cui fa riferimento fp e li memorizza nel vettore identificato da ptr (la lettura termina prima se viene raggiunta la fine del file o si verifica un errore); la funzione ritorna il numero di elementi effettivamente letti. q int fwrite(ptr, dim, num, FILE *fp) scrive num*dim byte di dati binari o testuali sul file cui fa riferimento fp prelevandoli dal vettore identificato da ptr; la funzione ritorna il numero di elementi effettivamente scritti.
17 Esempio typedef struct { float x; float y; } punto; int carica(file *fp, punto p[]) { int n=0; while (!feof(fp)) { if (fread(&p[n],sizeof(punto),1,fp)==1) n++; else break; } return n; }
18 Accesso diretto q Spostare l indicatore di posizione corrente di un file: int fseek(file *fp, long offset, int refpoint) Lo spostamento offset (in byte) può essere positivo o negativo e si riferisce a refpoint; refpoint può assumere tre diversi valori SEEK_SET indica l inizio del file SEEK_CUR indica la posizione corrente SEEK_END indica la fine del file la funzione fseek restituisce zero se l operazione ha avuto successo q Riavvolgere un file rewind(file *fp) equivale a fseek con offset=0 e refpoint=seek_set q long ftell(file *fp) restituisce il valore corrente dell indicatore di posizione del file specificato: pari al numero di byte dall inizio del file nel caso di un file binario, mentre un valore dipendente dal sistema per i file testuali
19 File e sistema operativo
20 File e programmi C q Per utilizzare un file in C è necessario prima aprire un flusso di comunicazione per associare il programma al file. q Il sistema operativo tiene traccia di tutti i file aperti da ogni programma nella tabella dei file aperti. q Per ogni file aperto, si tiene traccia di: modalità di utilizzo del file (lettura, scrittura, o lettura e scrittura); posizione corrente sul file (punta al prossimo byte da leggere o scrivere); indicatore di errore; indicatore di end-of-file (eof). q Una volta finito di utilizzare un file in un programma, è possibile chiuderlo.
21 Tabella file aperti e flussi standard q Per ogni programma, il sistema operativo tiene aggiornata una tabella dei file aperti. q I puntatori FILE restituiti dalla fopen, sono dei riferimenti alla tabella dei file aperti. q Tre flussi standard vengono automaticamente aperti quando inizia l esecuzione di un programma: stdin, stdout, e stderr. q Normalmente questi tre flussi rappresentano: il video del terminale (stdout e stderr); la tastiera del terminale (stdin). q printf e scanf utilizzano questi flussi standard.
22 File e sistema operativo Variabili puntatore stdin stdout stderr f1 f2 f3 Tabella dei file aperti nomefile: modouso: poscorr:. nomefile: modouso: poscorr:. nomefile: modouso: poscorr:. nomefile: FileTre modouso: poscorr:. nomefile: FileUno modouso: poscorr:. nomefile: FileDue modouso: poscorr:. File StandardInput StandardInput StandardError FileUno FileDue FileTre
I files in C. A cura del prof. Ghezzi
I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files
Linguaggio C: i file
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa
Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132
Gestione dei files Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132 Struttura del disco fisso Un disco fisso è composto da una serie di piatti sovrapposti Ogni piatto è
GESTIONE DEI FILE IN C
GESTIONE DEI FILE IN C Il concetto di file.. è una parte logicamente contigua del contenuto di un dispositivo! Deve essere capace di memorizzare grandi quantità di dati! I dati memorizzati devono sopravvivere
Gestione dei File. dischi nastri cd
Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
File binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
Gestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002
I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi [email protected] Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
I File. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle.
I File Il file e l unita logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle. Generalmente un file
Prof. G. Ascia. Gestione dei File C
Gestione dei File C 1 Generalità Il linguaggio C non contiene alcuna istruzione di Input/Output. Tali operazioni vengono svolte mediante chiamate a funzioni definite nella libreria standard contenute nel
Scrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
Lab 10 Gestione file di testo
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 10 Gestione file di testo Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome
Gestione dei file. File di testo e binari
Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile
