Scrivere in un file solo alcuni dati presenti in un'area riservata di memoria

Da Gambas-it.org - Wikipedia.

Il caso è quello in cui si intende scrivere in un file soltanto alcuni dati contenuti in un'area riservata di memoria e puntata da una variabile di tipo puntatore.

Nell'esempio esplicativo si precederà innanzitutto a scrivere usa serie di dati nell'area riservata di memoria mediante i Memory-Stream. Successivamente si scrivernno nel file, aperto in scrittura, solo 4 byte, partendo dal terzo byte, precedentemente memorizzati nell'area riservata.

Per poter scrivere solo alcuni dati con il comando Write, è necessario aggiungere un terzo elemento alla corrispondente riga di comando:

Write #file, puntatore, n

laddove n rappresenta la quantità di byte, presenti nella variabile puntatore, che dovranno essere scritti nel file. [Nota 1]


Esempio:

Public Sub Main()

 Dim fl As File
 Dim p As Pointer
 Dim st As Stream
 Dim b As Byte

' Alloca un'area di memoria pari a dieci byte, che sarà puntata da una variabile di tipo "Puntatore":
 p = Alloc(SizeOf(gb.Byte), 10)

' Genera una variabile di tipo "Stream" dal "Puntatore", per poter scrivere nella variabile "Puntatore" medesima:
 st = Memory p For Write

' Scrive mediante la variabile di tipo "Stream" dieci byte all'interno di quell'area di memoria riservata:
 For b = 97 To 106
   Write #st, b As Byte
 Next

 fl = Open "/percorso/del/file" For Create
 
' Sposta il puntatore interno sul terzo byte dell'area di memoria riservata...
 Seek #st, 2

' ...e scrive soltanto quattro byte, cominciando dal terzo, dell'area di memoria riservata puntata dalla variabile di tipo "Puntatore":
 Write #fl, p, 4

 fl.Close
 st.Close
 Free(p)

End


Note

[1] Vedere anche il seguente paragrafo: Scrivere in un file i dati contenuti in un'area di memoria puntata da un Puntatore