Salve a tutti. Sto cercando di dimostrare a me stesso che è possibile vivere senza usare le strutture
In VB10 uso le funzioni FilePut e FileGet con un record dichiarato a livello di struttura, senza problemi. In VB5 il mio record per la lettura/scrittura di un file random era una semplice variabile dichiarata a lunghezza fissa con la sua brava istruzione
Dim rec As String*100
ad esempio. Sto cercando di "forzare" il VB10 per fare lo stesso, in questo modo:
codice:
Public Class Form1
<VBFixedString(15)> Public rec As String
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
FileOpen(1, "esempio.dat", OpenMode.Random, , , 15)
rec = "1" + Space(14)
FilePut(1, rec, 1, True)
rec = "2" + Space(14)
FilePut(1, rec, 2, True)
rec = "3" + Space(14)
FilePut(1, rec, 3, True)
rec = "4" + Space(14)
FilePut(1, rec, 4, True)
rec = "5" + Space(14)
FilePut(1, rec, 5, True)
FileClose(1)
End Sub
End Class
Fin qui niente di particolare, il Button1 fa il suo dovere, se apro in BlockNotes il file esempio.dat mi ritrovo 5 campi di 15 caratteri ciascuno, che iniziano per 1,2,3,4,5.
Il "True" come parametro a FilePut imposta StringIsFixedLength in modo che non scriva il descrittore a due byte della lunghezza della stringa (ma questo lo sapete meglio di me). Il problema nasce quando vado a leggere un record con la funzione FileGet. Io faccio così:
codice:
Public Class Form1
<VBFixedString(15)> Public rec As String
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
FileOpen(1, "esempio.dat", OpenMode.Random, , , 15)
FileGet(1, rec, 1, True)
MsgBox(rec & Len(rec))
FileClose(1)
End Sub
End Class
Risultato: il nulla totale per 'rec', e 0 per il valore di len(rec). E nessun messaggio di errore da parte del compilatore. Come mai FilePut capisce e FileGet no? Dove sbaglio?