Newsgroup: it.comp.lang.c
Titolo: Array di puntatori a files

Salve , sto sviluppando un software che deve leggere da un numero variabile di
files contemporaneamente.Purtroppo il numero di files da cui devo leggere non
e' noto a priori ma e' variabile e compreso tra 1 e 20.Come dice il titolo del
post cercavo di costruirmi un array in cui memorizzare i puntatori ai file
invece di lavorare con 20 puntatori diversi.In maniera molto naif ho provato
(senza successo ovviamente!) con una struttura del tipo
#include <stdio.h>
FILE *IN[20]
.
.
e poi inizializzare i puntatori e l'array cosi':
for(i=0;i<20;i++)
IN[i]=fopen(nomefile,"rb");
..ma non funziona (uno ci spera sempre)
L'alternativa che sto valutando e' quella di usare un solo puntatore e poi
abusare di fseek.Il problema e' che devo aprire un file , leggere il dato ,
chiudere il file e contare molto bene i byte per eseguire il salto con fseek
sul file sucessivo .La soluzione con l'array mi sembrava molto piu' elegante e
pratica anche se non ho ancora trovato un metodo per svolgerla.Quanti byte
occupa un puntatore a file?Qualcuno si e' gia imbattuto nel problema ( o nella
relativa libreria che include la funzione desiderata) e l'ha risolto?
Grazie di tutto
-- 
Posted from 
ppp-221-41.25-151.libero.it
 [151.25.41.221] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ..ma non funziona (uno ci spera sempre)
Scusami ma qui apri sempre lo stesso file 20 volte?
Cioé.... se cerchi di accedere un file già aperto la cosa non dovrebbe
essere lecita....se non mi ricordo male....in realtà non ci ho mai
provato!!!

 occupa un puntatore a file?
Un puntatore a FILE occuppa tanti byte quanti un qualunque altro puntatore,
per verificare basta che tu faccia un sizeof(FILE*), ma per fseek non serve
a nulla saperlo. In ogni caso, se non hai bisogno di avere a disposizione
tutti i puntatori a FILE nello stesso tempo, non c'è bisogno di un array di
puntatori a FILE, ne basta uno solo che riassegni all'interno di ogni ciclo:
FILE * IN;
for(i=0;i<20;i++) {
    char ch[255];
    scanf("%s", nomefile);
    IN=fopen(nomefile,"rb");
    /* leggi il file e lo usi */
    fclose(IN);
}

In effetti apre 20 volte lo stesso file e reimposta il puntatore all'inizio del
file ogni volta
-- 
Posted from 
ppp-149-49.25-151.libero.it
 [151.25.49.149] 


Il problema e' l'inizializzazione dei puntatori ovvero questo NON funziona
FILE *in[2];
char file[2];
int i, byteletto;
main
file[0]='f';
for(i=0;i<2;i++)
                          //uso la quadra perche' su mailgate non funziona la
[                         //graffa
file[1]=i+48;             //mi inserisce il carattere '0' se i=0 , '1' se i=1
in[i]=fopen(file, "rb");  //questa inizializzazione fallisce..o meglio non
]                         //capisco bene ma non funziona
//per leggere uso
for(i=0;i<2;i++)
[
byteletto=fgetc(in[i]);
]
Se invece faccio cosi' funziona:
FILE *in[2];
int i,byteletto;
main
in[0]=fopen("f0","rb");      //inizializzazione "normale" dei puntatori
in[1]=fopen("f1","rb");
for(i=0;i<2;i++)
[
byteletto=fgetc(in[i]);      //se inizializzo "bene" i puntatori poi in lettura
printf("\n%d", byteletto);   //posso sfruttare il ciclo for
]
Il mio problema , in sostanza , e' inizializzare dinamicamente i puntatori ai
file tramite un ciclo for senza dovere inizializzare esplicitamente i puntatori
uno per uno.Ho inventato questi due semplici esempi per far capire il problema
ma se volete posto direttamente il listato del programma.
-- 
Posted from 
ppp-149-49.25-151.libero.it
 [151.25.49.149] 



Spero che con l'esempietto proposto tu risolva i tuoi problemi!
Distinti saluti