1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

INFORMATICA Altre Istruzioni di I/O
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Gestione dei file Ing. Simona Colucci.
LINGUAGGIO DI PROGRAMMAZIONE C
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
I File di testo in Pascal
Algoritmi e Programmazione
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
PHP e i files Laboratorio di Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Operazioni di I/O da console e da file in C standard
1 System Call per Comunicazione tra Processi Pipe.
SC che operano su file (1)
Anno accademico Input e Output in C. Anno accademico Sommario Input e outputInput e output I flussi di I/O I flussi di I/O Luso.
INFORMATICA I file.
Programmazione Procedurale in Linguaggio C++
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
File.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Introduzione agli stream e alle classi
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
1 File System ed Input/Output UNIX Implementazione del File System Caratteristiche del File System Unix/Linux System Call relative al File System Linput/output.
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
1 Gestione dei File Corso di Informatica A Vito Perrone.
File di testo, file binari
I File.
Le funzioni.
Modulo 13: System call relative al File System
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Unità Didattica 3 Linguaggio C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
Esercizi su File e Liste
Gestione dei file di testo, matrici e struct
2000 Prentice Hall, Inc. All rights reserved. Capitolo 11 (Deitel) Lelaborazione dei file Sommario Introduzione La gerarchia dei dati 11.3.
Programmazione in linguaggio C
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
File binari Accesso a file con record di lunghezza costante Struct Persona { Int id; Char nome[50];// nome e cognome Double stipendio; }; Persona dipendente;
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Fondamenti di Informatica L- A #include “mylib.h” int leggi(int a[], int dim) { int i=0; while( scanf("%d", a+i) ) { i++; if( i>=dim ) break; } return.
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 6 Marzo 2016.
APPUNTI SUL LINGUAGGIO C Memoria secondaria: File
Transcript della presentazione:

1 Gestione dei File

2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano la persistenza dei dati –cioè del contenuto delle variabili Tramite i file, i dati possono sopravvivere al termine dell'esecuzione del programma N.B.: i file sono usati anche per memorizzare i programmi !! –Quando se ne chiede l'esecuzione, il sistema operativo copia il programma (eseguibile, conservato in un file) in memoria centrale e inizia a eseguirlo

3 File binari, file di testo I file sono strutture dati sequenziali –Sequenziale significa: si leggono (e scrivono) gli elementi del file in sequenza Un file binario è una sequenza di byte che non è "interpretata" in alcun modo Un file di testo è una sequenza di caratteri "interpretata": –Alcuni caratteri rappresentano separatori Esempio: il carattere di "newline" è interpretato dalla stampante come "salto alla riga successiva"

4 File e sistema operativo I file sono gestiti dal S.O. –Sono resi visibili all'interno del linguaggio per essere manipolati attraverso opportune funzioni di libreria Per essere usato, un file deve essere prima aperto, e dopo l'uso andrà chiuso –Aprire e chiudere il "flusso di comunicazione" tra il programma e il file In C anche le periferiche sono viste come file (chiamati "file speciali") –stdin e stdout (terminali, stampanti, ecc) –Si può "leggere" e "scrivere" con le stesse modalità (quelle dei file) da ogni device di I/O

5 Tutte le periferiche sono "viste" come file!! Possiamo "leggere" e "scrivere" con le stesse modalità (quelle dei file) in ogni operazione di I/O QUINDI SAPPIAMO GIÀ TUTTO !!

6 Rappresentazione interna dei file Ogni file aperto da un prog. ha un descrittore –Risiede nella tabella dei file aperti, una delle strutture dati che il S.O. associa ai programmi in esecuzione Il descrittore memorizza: – la modalità d'uso (read, write) – la posizione corrente all'interno del file – l'indicatore di eventuale errore – l'indicatore di eof (end-of-file) L'apertura del file restituisce un descrittore –Per la precisione, un puntatore a un descrittore

7 descrittori FILE NORMALI FILE SPECIALI ?

8 Dichiarare e aprire un file Puntatore al descrittore: FILE * fp Apertura del file: –FILE * fopen (char * nomefile, char * modalità) nomefile e modalità sono stringhe nomefile dà il percorso (path), oppure il nome è interpretato nella cartella in cui si lancia l'eseguibile apre il file (oppure lo crea, se è inesistente) –modalità di apertura "r" lettura modalità testo, posizionamento inizio file (read) "w" scrittura modalità testo, posizionamento inizio file (write) "a" scrittura in modalità testo, posizionamento fine file (append) "rb", "wb" e "ab" (idem, ma considerando il file come binario) Se si verifica un errore, fopen() restituisce NULL

9 Cancellare, ridenominare, chiudere int remove (char * nomefile) –cancella file nomefile –restituisce 0 se buon fine, != 0 altrimenti int rename (char *oldname, char *newname) –cambia nome al file –restituisce 0 se buon fine, !=0 altrimenti int fclose (FILE * fp) –fp diventa NULL, descrittore di tipo FILE rilasciato –restituisce 0 se buon fine, altrimenti EOF

10 Gestione degli errori int ferror (FILE * fp) – restituisce 0 (falso) se commesso errore int feof (FILE * fp) – restituisce 0 (falso) se NON si è alla fine void clearerr (FILE * fp) – riporta al valore normale gli indicatori di errore e eof

11 Lettura e scrittura Si opera sui file in quattro modi possibili Tre modi per i file di testo: –Precisando la formattazione dell' I/O –Un carattere alla volta –Per linee di testo Fino ad ogni prossimo '\n' Un modo per i file binari: –Per blocchi di byte approccio "à-la-sizeof"

12 scanf e printf fanno riferimento a stdin e stdout –Non serve specificare su quale file agiscono!! fprintf e fscanf fanno riferimento a file generici e si usano esattamente come scanf e printf int fprintf (FILE * fp, str_di_controllo, elementi) int fscanf (FILE * fp, str_di_controllo, indirizzo_elementi) Restituiscono il numero di elementi effettivamente letti/scritti, o zero se errore Lettura / scrittura formattata

13 #include int main () { FILE * fp1, * fp2; int numero; char c; fp1 = fopen (nomeFile1,"r");/*file lettura, modalità testo */ fp2 = fopen (nomeFile2,w");/*file scrittura,modalità testo*/ if (fp1 != NULL && fp2 != NULL ) { fscanf(fp1,%d%c,&numero,&c); printf(%d%c,numero,c); fprintf(fp2,%d%c,numero,c); fclose (fp1); fclose (fp2); } else printf ("Il file non può essere aperto.\n"); return 0; } Leggere, mostrare a video e salvare il contenuto di una struct

14 int getchar (void) – legge un carattere da standard input, restituendolo come intero int putchar (int c) – scrive un carattere su standard output int fgetc (FILE * fp) int fputc (int c, FILE * fp) – leggono/scrivono un carattere dal/sul file descritto da *fp, restituendolo come inter Lettura carattere per carattere Se fp è stdin/stdout è identico scrivere getc() e putc(c)

15 #include int main () { FILE * fp; char c; fp = fopen ("filechar", "r"); /* file lettura, modalità testo */ if (fp != NULL) { c = fgetc (fp); while (c != EOF) { /* oppure while (! feof (fp)) */ putchar (c); c = fgetc (fp); /* oppure c=(char)fgetc (fp); */ } fclose (fp); } else printf ("Il file non può essere aperto.\n"); return 0; } Leggere e mostrare a video un file while ((c=fgetc(fp)) != EOF) putchar(c);

16 Lettura / scrittura per linee di testo Su stdin e stdout: –char * gets (char * s) s è l'array in cui copiare la stringa letta da stdin –s risulta terminata da un '\0', aggiunto in automatico Non si può limitare la dimensione dei dati in input –Non controlla che la stringa s sia sufficientemente grande In caso di errore, restituisce NULL –int puts (char * s) scrive la stringa s, escluso il '\0' –al posto del '\0' che si trova nella stringa scrive un '\n' Restituisce n>=0 se OK, EOF in caso di errore

17 Lettura / scrittura per linee di testo Su file qualunque (fp): –char * fgets (char * s, int n, FILE * fp) legge al più n-1 caratteri, fino a '\n' o EOF se incontra '\n' lo inserisce tra gli n-1, e mette alla fine anche il terminatore '\0' In caso di errore, restituisce NULL –int fputs (char * s, FILE * fp) come puts –Ma non aggiunge il '\n', si limita a non scrivere il '\0' Restituisce 0 se OK, EOF in caso di errore

18 int copiaselettiva (char refstr []) { char line [MAXLINE]; FILE * fin, * fout; fin = fopen ("filein", "r"); if (fin == NULL) return ERROR; fout = fopen ("fileout", "w");/* aperto in scrittura, modalità testo */ if (fout == NULL) { fclose (fin); return ERROR; } while (fgets (line, MAXLINE, fin) != NULL) /* fgets legge da filein al più MAXLINE–1 caratteri */ if ( strstr(line, refstr) != NULL) fputs (line, fout); /* strstr rest. posiz. della prima occorrenza di refstr in line; se non c'è, NULL */ fclose (fin); fclose (fout); return OK; } #define OK 1 #define ERROR 0 # define MAXLINE 100

19 Lettura / scrittura per blocchi di byte Ci sono funzioni che consentono di scrivere o leggere un intero blocco di dati testuali o binari –Utili, per esempio, quando si vuole scrivere su file un'intera struct Funzioni di libreria (non descritte qui): –fread(...) –fwrite(...) Consultare i manuali del C

20 Accesso diretto Si può accedere ad uno specifico byte come se il file fosse un array di blocchi di byte: –int fseek (FILE * fp, long offset, int refpoint) imposta la posizione corrente a un valore pari a uno spostamento (positivo o negativo) pari a offset, calcolato rispetto a uno dei seguenti punti di partenza: –L'inizio del file, se refpoint vale SEEK_SET (costante di stdio.h) –L'attuale posizione corrente, se refpoint vale SEEK_CUR (altra costante di stdio.h) –La fine del file, se refpoint vale SEEK_END (costante di stdio.h) restituisce 0 se l'operazione di spostamento va a buon fine, un valore diverso altrimenti

21 Accesso diretto long int ftell (FILE * fp) –restituisce posizione corrente: per file binari è il numero di byte dall'inizio per file testuali il numero dipende dall'implementazione void rewind (FILE * fp) –definita dall'equivalenza: –void rewind (f) fseek (f, 0, SEEK_SET); "riavvolge" il file (la pos. corrente torna all'inizio)

22 #include #define MAXLINE 100 int main() { char *temp, line[MAXLINE], match[MAXLINE]; FILE * cfPtr; int countMatch = 0; if((cfPtr = fopen("D:\\prova1.txt", "r")) != NULL) { printf("stringa da cercare--> "); if (gets(match) != NULL) { printf("match = %s\n",match); while (!feof(cfPtr)) if (fgets(line, MAXLINE, cfPtr) != NULL) { temp = strstr(line, match); if (temp !=NULL) countMatch++; } printf("numero match--> %d", countMatch); } else printf("errore apertura file"); return 0; } Esercizietto Che cosa fa? Se non si capisce… provare per credere ! char * strstr(char* s, char* p) restituisce NULL, oppure un puntatore al carattere della stringa s a partire dal quale inizia la sottostringa p (se essa è presente)