Salve....
C'è un modo di "appendere" dei dati in un file usando RandomAccessFile?
O meglio, è possibile aprire il file (esistente ) e scriverci alla fine un valore o altro senza per forza doverlo leggere tutto nel programma e poi inserire il valore?
Posso anticipare che ricordo i file ad accesso casuale dalle prime versioni del Basic (MS), questi non li ho usati, ma immagino funzionino allo stesso modo, ovvero l'accesso ad un record dovrebbe essere diretto, senza la necessità di leggere tutto il file (gli dò un'occhiatina e ti rispondo meglio )
Altrimenti, puoi usare:
File.OpenOutput(Dir As String, FileName As String, Append As Boolean)
Sì, infatti funziona più o meno come i file random dei vecchi vb.
Ad esempio, con: WriteDouble (Value AsDouble, Position AsLong)
scrivi un valore Double nella posizione che passi, ovunque essa sia all'interno del file.
Chiaro... sto facendo delle prove la prima scrittura va bene, pero poi quanto tento di aprire il file per "appendere" dei valori mi dice che non posso scrivere. credo che dipenda dal fatto che uso questo parametro:
Però in fase di creazione non credo si possa settare a true...
B4X:
Dim raf As RandomAccessFile
If File.Exists(LogTrackDirToSave,LogTrackTxtToSave)=False Then
raf.Initialize(LogTrackDirToSave,LogTrackTxtToSave, False)
Else
raf.Initialize(LogTrackDirToSave,LogTrackTxtToSave, true)
End If
Dim row(4) As String
row(0) = Npoint
row(1) = DateTime.Date(DateTime.now) & "-" & DateTime.time(DateTime.Now)
row(2) = Round2(PointLAT,6)
row(3) = Round2(PointLON,6)
raf.WriteObject(row, False, raf.CurrentPosition)
raf.Close
Ciao... se tenti di creare il file con attributo "True" ti da un errore, quindi per forza sei costretto a crearlo come false...
Sto provando e leggendo wiki... ma non capisco bene... CurrentPosition è come dici tu...
e poi scrivi il primo record, senza nemmeno impostare la CurrentPosition
(prima del Close, usa un Flush, per sicurezza, semmai rimanesse un buffer con dei dati)
azz... se era vb.net... avevo già finito.... ahhaha
Mi da sempre errore o in creazione, file non esiste (parametro true) o in scrittura, che non posso scrivere...
PS non puoi non usare "current position".
se non risolvo cosi scriverò un csv e poi ogni x minuti lo carico in una list e lo riscrivo.
In gergo automazione industriale "faccio una porchetta"...
ho paura però che per log molto lunghi la memoria inizierà a scarseggiare...
Si parla di loggare delle posizioni gps ogni 10 sec magari per una giornata intera.
Ciao alla fine ho fatto cosi... perché sto random ma rotto...
Credo di poter togliere anche il file Exists...
Con il true predispongo il file per "appendere" alla fine le linee...
Certo il random aveva il "compressed" ma per ora faccio cosi.
B4X:
Sub SaveTableToCSVArray(Npoint As Long, PointLAT As Double , PointLON As Double)
Dim tw As TextWriter
If File.Exists(LogTrackDirToSave, "/" & LogTrackTxtToSave)=False Then
tw.Initialize(File.OpenOutput(LogTrackDirToSave,"/" & LogTrackTxtToSave, True))
Else
tw.Initialize(File.OpenOutput(LogTrackDirToSave,"/" & LogTrackTxtToSave, True))
End If
tw.WriteLine(Npoint & ";" & DateTime.Date(DateTime.now) & ";" & DateTime.time(DateTime.Now) & ";" & Round2(PointLAT,7) & ";" & Round2(PointLON,7))
tw.Close
End Sub