Dal Reference dice che la seek ritorna un valore booleano vero se riesce, falso se fallisce.
Prova a verificare se riesce con una print su monitor seriale.
Premetto che nel documento non è scritto solamente "QUI" ma durante l'arco della giornata vengono scritti altri dati...il seek() in effetti mi ritorna false ma non capisco dove sbaglio
... si, ma voglio capire in che stato è il file quando fa la seek() e questo lo possiamo solo scoprire con una lettura in cui verifica COSA legge ... poi vediamo la seek()
Scusami gpb non ho capito quello che vuoi dirmi. Io ho aperto il file in modalità scrittura, posiziono il cursore e difatti la parola "QUI" lo scrive (ma non solo essendo il codice più lungo ci sono altri dati che scrivo su SD), poi chiudo il file.
Il discorso non è se scrive o no, il discorso è perché mi scrive alla fine quando il cursore lo modifico a 0..
Ma perché non fate le prove che vi si chiede di fare ?
Se la seek() ti da FALSE è OVVIO che non viene eseguita, per cui ti ho chiesto di aggiungere subito prima della seek() una lettura dal file e di riporare cosa legge per capire: 1. se riesce a fare la lettura; 2. se effettivamente è posizionato a EOF. Ah, già che ci sei, aggiungi e stampa anche il valore che ti ritorna il metodo position().
in mySerial mi stampa che la seek non funziona, ritorna false
se seek() lo inserisco nel codice dove si apre in modalità lettura ritorna sempre false
in Seriale mi stampa:
READ: 68
Position pre-seek: 109
Seek: 1
Position: 0
Gianky00:
Salve,
quando io vado a far partire questa porzione di codice:
mi scrive "QUI" alla fine del file csv e NON all'inizio...se ho puntato il cursore con seek(0) a 0 come mai non parte dall'inizio?
Grazie!!
Mi sembra normale che non lo faccia, tu vuoi scrivere dei caratteri all'inizio di un file che contiene già delle linee?
tu riesci su un protocollo ad aggiungere una linea all inizio con altre 10 righe scritte a biro ?
no.
solo se lo riscrivi su un altro protocollo puoi aggiungere altre righe in mezzo alle altre o all'inizio.
ecco perchè i vari sistemi operativi utilizzano una prte di ram e cartelle "temp" .. il file va riscritto in completo come temp .. si elimina l'originale e si rinomina, ora avrai la riga nuova dove ti pare
Il seek() come lo usi tu va bene in lettura ... punto il cursore e leggo cosa c'è in quella pos
ciao
Ciao palos71, intanto ti ringrazio per la risposta.
Io vorrei scrivere un dato quasi all'inizio di un file già esistente. Pensavo che seek() potesse darmi la risposta.. c'è un modo per risolvere il mio problema?
Il discorso è che vorrei realizzare una stazione meteo e per immagazzinare i dati utilizzo una SD..per rendere più facile la lettura in un successivo momento, vorrei spostare il cursore quasi all'inizio e scriverci su..
Premesso che non conosco bene il funzionamento della seek() in c, io vedrei 2 possibili soluzioni:
aggiungi i deti sempre in coda al file e risolvi la cosa dall'altro lato quando vai a leggerli,
fai come dice pablos e passi da un file temporaneo in cui scrivi prima i nuovi dati, poi ci copi in coda quelli vecchi e infine rinomini col nome corretto. Credo però che questa soluzione sia un tantino dispendiosa...