PDA

View Full Version : fseek()


gio84
01-03-2005, 11:33
devo inserire una struct in coda ad un file
fseek (stream,m,SEEK_SET);

la sintassi è corretta?
m è una variabile che contiene la posizione dell'ultimo elemento del file
m=ftell(stream);

ogni volta che cerco di accedere al file per inserire una nuova struct in coda, mi cancella tutto il file e mi mette la nuova struct all'inizio del file.

ilsensine
01-03-2005, 11:39
Originariamente inviato da gio84
devo inserire una struct in coda ad un file
fseek (stream,m,SEEK_SET);

la sintassi è corretta?
No:
fseek (stream,0,SEEK_END);

m è una variabile che contiene la posizione dell'ultimo elemento del file
m=ftell(stream);
...che inizialmente restituisce 0 (ftell restituisce la posizione corrente nel file)


ogni volta che cerco di accedere al file per inserire una nuova struct in coda, mi cancella tutto il file e mi mette la nuova struct all'inizio del file.
Devi aprire il file per "append", non per "write":
fopen(filename, "a");
Nota che questa forma posiziona il file pointer alla fine del file, quindi non è necessario eseguire la fseek.

gio84
01-03-2005, 11:47
ti ringrazio per la risposta avevo già risolto.
Mi sapresti dire qual'è quella funzione che mi restituisce la dimensione di un file?

ilsensine
01-03-2005, 11:57
Non esiste una funzione standard; sotto linux usiamo la (f)stat, sotto windows ci sono altre funzioni. Un modo macchinoso e poco ortodosso che funziona ovunque è effettuare la fopen(file, "r") - fseek(stream, 0, SEEK_END) - ftell(stream) - fclose(stream). Ti consiglio di usare le API del tuo sistema operativo.

gio84
01-03-2005, 14:19
avevo pensato nel caricamento dati di inserire ftell
in modo che potevo conoscere la posizione dell'ultimo elemento inserito nel file.
Pero' poiche ho messo anche una funzione che mi permette l'inserimento aggiuntivo di elementi nel file vorrei sapere come incrementare la variabile che contiene la funzione ftell()

CARICAMENTO
----
---
m=ftell(stream)


Aggiunta elementi

fseek(stream, 0, SEEK_END)
---
---
m=ftell(stream)

Dovrebbe andare bene cosi?

ilsensine
01-03-2005, 17:30
Se devi aprire un file sia per lettura che per append, ti consiglio di aprirlo con il flag "a+". Così è come viene documentato nelle glibc:

a+: Open for reading and appending (writing at end of file). The
file is created if it does not exist. The initial file position
for reading is at the beginning of the file, but output is
always appended to the end of the file.

gio84
01-03-2005, 17:56
si ma il caricamento e l'aggiunta di un elemento li ho implementati in due funzioni differenti quindi non ho questo problema.
Volevo sapere se l'esempio di prima andava bene...