PDA

Visualizza versione completa : [C] Estrapolare informazioni da file


Manugal
06-04-2006, 16.40.46
Ciao :)

Devo creare una funzione che riesca ad estrapolare delle informazioni da un file per metterle in una struttura chiama DBFInfo. Allora da questo file (che è stato scritto in modalità binaria) devo estrapolare l'header che è fatto così:


typedef struct{
char name[DBF_NAME_LENGTH+1];
short NumCampi;
long NumRecords;
short dimHeader;
short dimRecord;
long timestamp;
}header;


Inoltre, ho un'altra struttura che mi memorizza delle informazioni sul file aperto ed è fatta così (e anche questo dovrò inserire nella DBFInfo):


typedef struct{
FILE *fp; /* puntatore al file aperto tramite una funzione OpenFile() implementata da me
int handle; /* numero che identifica il file aperto (da 0 a 32)
char name[DBF_NAME_LENGTH+1]; /* nome del file
short currentRec; /* record corrente del file (questo per il momento non ci interessa)
}infohandle;


Infine la struttura dove devo andare a porre l'header letto dal file è la seguente:

typedef struct {

FILE *fp; //!< File pointer del database aperto
char Name[DBF_NAME_LENGTH+1]; //!< Nome del database escluso estensione
int NumFields; //!< Numero dei campi del database
long NumRecs; //!< Numero totale di records nel database
int HeaderLen; //!< Lunghezza dell'Header
int RecordLen; //!< Lunghezza di un record del database
long CurrentRec; //!< Numero del record corrente
time_t LastUpdate; //!< Data e ora ultimo aggiornamento

} DBF_INFO_t;


Non so come fare ad estrapolare i singoli campi per poi metterli nella struttura DBFInfo. Cioè se io ad esempio voglio prelevare il campo name dell'header come faccio?

Grazie.

Manugal
06-04-2006, 17.31.54
Allora forse ho trovato il metodo (cioè tramite la fread). Il problema è adesso come passare l'array di strutture infohandle (dove gli sono stati già assegnati dei valori in una funzione) alla mia funzione (non tramite passaggio dei parametri). Se io quell'array di strutture lo dichiaro come extern posso averlo disponibile anche in altri file? Facendo cioè una dichiarazione tipo extern infohandle h[MAX_DBF_OPEN]?