Facendo la ricerca sul forum troverai molte discussioni inerenti alla questione che poni, in modo particolare sull'uso dei metodi Read e Write.
.... in valori HEX ( 0-255)
....di convertire l'intero file da bin ---> HEX e di sostituire dei precisi valori in hex (0-255)...
Suppongo tu voglia intendere in valori di tipo Byte espressi in rappresentazione decimale (0-255).... comunque sia, se tu già conosci la posizione nel file del byte da modificare puoi operare molto velocemente.
Mettiamo di avere un file contenente i seguenti byte (li riporto in decimale): 100, 101, 102, 103. Intendiamo cambiare il 2° byte da 101 a 107.
Operiamo velocemente così:
Public Sub Button1_Click()
Dim fl As File
fl = Open "/percorso/del/mio/file" For Write
' Mi sposto con il puntatore all'interno del file nella posizione 1 (ossia la 2^):
Seek #fl, 1
' Quindi vado a scrivere il valore 107 (che in esad. è 6B):
Write #fl, 107 As Byte ' (As Byte è necessario con Gambas 3 !)
' Se mi piace utilizzare la "rappresentazione" esadecimale del byte:
' Write #fl, &6B As Byte
fl.Close
End
oppure per manipolarlo con più calma puoi trasferirne i byte in un'apposita variabile:
Public Sub Button1_Click()
Dim fl As File
Dim a As New Byte[]
Dim j, h As Byte
fl = Open "/percorso/del/mio/file" For Read
While Not Eof(fl) ' fin tanto che non sono giunto alla fine del file...
Read #fl, j '...lo leggo byte per byte,
a.Add(j) ' che vado ad aggiungere negli elementi dell'array.
Wend
fl.Close
'''''
' cambio i valore dell 2° elemento dell'array, come da intenzioni iniziali, in 107 (che in esad. è 6B):
a[1] = 107
'''''
' Vado a salvare il nuovo contenuto in un altro file (...tanto per avere anche il vecchio).
' Poiché questo file non esiste, lo devo creare "ex novo"; e pertanto userò la parola: ''Create'':
fl = Open "/percorso/del/mio/nuovo/file_2" For Create
For h = 0 To a.Max
j = a[h]
Write #fl, j As Byte ' (As Byte è necessario con Gambas 3 !)
Next
fl.Close
End
Letture utili:
http://gambaswiki.org/wiki/lang/open
http://gambaswiki.org/wiki/lang/write
Potrebbe esserti utile anche questa pagina della WIKI:
https://www.gambas-it.org/wiki/index.php/Read
Sicuro ho fatto un casotto , date un occhiata per una correzzione ! grazie mille
PRINT fileAAA ' per vedere se ha cambito il byte da me richiesto
Per "vedere" il file - binario -lo devi aprire in "Lettura":
variabileFile = Open "/percorso/del/mio/file/che/voglio/aprire" For Read
ed andarlo a leggerlo con:
Dim by As Byte
.......
.......
Read #variabileFile, by
....sostanzialmente. Ma per leggerlo, devi anche qui far spostare il puntatore interno con Seek, se vuoi puntare ad un byte in particolare. Se vuoi leggere tutto il file e non conosci la dimensione del file, puoi fare così con un ciclo:
While Not Eof(variabileFile) ' fintantoché non è giunto alla fine del file.....
Read #variabileFile, by
Print by ' vado a vedere in console il byte in quel momento letto
Wend
Poi quel fileAAA = File.Load(Dialog.Path) non ti fa gestire il file binario, ma te lo fa gestire come stringa. Infatti prova a fare:
....
Dim w as String
If Dialog.OpenFile() Then Return
w = File.Load(Dialog.Path)
Print w
Vedi cosa esce in console.
Se tu vuoi gestirti il file binario, devi appunto usare Open, ma sopra devi sostituire così:
Dim percorso_del_mio_file As String
Dim variabileFile As File
If Dialog.OpenFile() Then Return
percorso_del_mio_file = Dialog.Path
' quindi l'apertura del file:
variabileFile = Open percorso_del_mio_file For Write