ARRAY: - Struttura omogenea (contiene elementi dello stesso tipo) e finita (ha una dimensione definita) STRUCT: - Struttura non omogenea (può contenere elementi di tipi diversi) e finita (ha una dimensione definita) FILE: - Struttura omogenea (inteso come una sequenza di byte o strutture dello stesso tipo) e (virtualmente) infinita (la dimensione può crescere nel tempo fino ai limiti del file) File di Testo: - Contengono sequenze di caratteri (stringhe) - Sono facilmente leggibili (contengono lettere, numeri e segni di punteggiatura) - Possono essere letti e modificati facilmente con un editor - Occupano molto spazio su disco - Possono essere di tipo .html, .xml, .xsl, .txt, etc. File Binari: - Contengono sequenze di byte o di strutture - Non è possibile saltare in una posizione specifica (vengono quindi lette tutte le righe del file) - Non sono leggibili direttamente dall’uomo - Possono essere di tipo .doc, .xls, .ppt, .bin, .dat, .exe, etc. File BMP - Sono File Binari che memorizzano immagini raster - Contengono una testata con le informazioni sull’immagine (dimensioni, profondità di colore, etc.) - I dati dell’immagine descrivono ogni pixel (posizione e colore) - Occupano molto spazio su disco non essendo compressi (o comunque vengono compressi in modo semplice) - Vengono utilizzati per immagini ad alta qualità e fedeltà visiva - L’estensione tipica è .bmp La testa dei File BMP è composta da: - BITMAPFILEHEADER o È la prima struttura del File BMP o Contiene informazioni generali come il tipo del file (char bfType[2]), la dimensione totale del file (int bfSize), l’offset dove iniziano i dati dell’immagine (pixel) (int bfOffBits), e contiene anche due byte riservati, ovvero che sono nulli (int bfReserved) - BITMAPINFOHEADER o Viene subito dopo la prima testata o Specifica i dettagli come la larghezza e l’altezza dell’immagine, il numero di bit per pixel, il metodo di compressione, la dimensione dei dati dell’immagine, la risoluzione e la palette dei colori usata dall’immagine FILE * fopen(const char * filename, char * mode); filename: nome del file mode: r (sola lettura del file; il file deve esistere) w (sola scrittura del file; se il file non esiste lo crea, se esiste lo svuota) a (scrive nel file a partire dalla fine; se il file non esiste lo crea) r+ (legge/aggiorna il file; posso aprire il file in lettura, e nel caso modificarlo) w+ (scrive/aggiorna il file; se il file esiste non lo svuota) a+ (scrive a partire dalla fine/aggiorna il file) mode può concludersi specificando il tipo di file su cui si sta lavorando: - t (text): specifica che il file su cui si sta lavorando è un File di Testo (se non viene specificato è di default) - b (binary): specifica che il file su cui si sta lavorando è un File Binario int fclose(FILE * file); - Non si può fare la fclose() di un puntatore nullo (restituisce 0 oppure -1 se in errore) int fputc(char ch, FILE * fp); - Scrittura del carattere chr su fp (file di testo) char * fgets(char * str, int size, FILE * fp); - Lettura di una stringa str da fp (file di testo) int fputs(char * str, FILE * fp); - Scrittura di una stringa str su fp (file di testo) int fscanf(FILE * fp, const char * format, ...); - Lettura formattata da fp (file di testo), restituisce il numero di elementi letti int fprintf(FILE * fp, const char * format, ...); - Scrittura formattata su fp (file di testo), restituisce il numero di elementi scritti void rewind(FILE * fp); - Riposizionamento all'inizio (azzeramento posizione testina di lettura/scrittura), ignorata in caso di file aperto int fflush(FILE * fp); - Forza la scrittura dei dati bufferizzati sullo stream. Se fp vale NULL, forza tutti i buffer aperti in scrittura. Restituisce 0/EOF (ma normalmente non si chiama mai) int rename(char * old, char * new); - Rinomina un file int remove(char * filename); - Cancella il file filename (restituisce 0 se l'operazione è riuscita) void perror(char * str); - Stampa il messaggio con la descrizione dell'errore dell'ultimo errore che c'è stato size_t fread(void * ptr, size_t size, size_t count, FILE * fp); - Leggi su un File Binario size_t fwrite(const void * ptr, size_t size, size_t count, FILE * fp); - Scrive su un File Binario int fseek(FILE * fp, long offset, int origin); origin: o SEEK_SET (sposta la posizione del puntatore all’inizio del file) o SEEK_CUR (sposta la posizione del puntatore alla posizione corrente) o SEEK_END (sposta la posizione del puntatore alla fine del file) offset è il numero di byte da spostare rispetto a origin long ftell(FILE * fp); - Restituisce la posizione corrente del puntatore di lettura/scrittura in un file. Può essere usata per determinare la dimensione del file o per verificare la posizione nel file durante la lettura/scrittura.