La gestione dei Files

Gestione dei files binari

La gestione dei files binari è molto simile alla gestione dei files casuali: i metodi per l’accesso al file sono gli stessi ma vengono utilizzati in modi leggermente differenti.

Un file binario solitamente contiene informazioni di lughezza variabile. Chiariamo meglio il concetto con un esempio.

Un file di tipo bitmap contiene una serie di bytes che ne identificano il formato, un header che mantiene le informazioni sulla risoluzione, il numero di colori ed altre informazioni di formato e poi contiene una sequenza di bytes che costituiscono l’immagine (vogliate scusarmi se ho sintetizzato in modo così semplicistico il formato bitmap). Con un accesso casuale siamo obbligati a definire un record di dimensione fissa: 2 bytes, 10 bytes, 200bytes ma non possiamo variare questa dimensione di volta in volta. Con un file ad accesso sequenziale, potremmo leggere un intera riga fino al carattere di ritorno a capo (costante vbCRLF), oppure fino alla virgola (ma non sarebbe utile al caso nostro), ma non possiamo indicare la lunghezza della stringa da leggere di volta in volta per cui si ricorre al metodo di accesso binario.

L’apertura di un file ad accesso binario è determianto dalla seguente istruzione Open:

Dim NomeLogico as Integer
Dim NomeFisico as Integer

NomeLogico = FreeFile
NomeFisico = "c:\Esempio\immagine.bmp"
Open NomeFisico For Binary Access Read Lock Write As NomeLogico

Come notate a differenza del metodo ad accesso casuale non è stata specificata la lunghezza del record da leggere. Questo perchè lo definiremo di volta in volta in base all’informazione da leggere. Ipotizziamo di avere il seguente tracciato record per il file:

Informazione    posizione   lunghezza
-------------+------------+------------
Cognome      |   1        |   30
Nome         |   31       |   20
Eta          |   51       |   3
Sesso        |   54       |   1
Barba        |   55       |   1
-------------+------------+------------

Rendendo la cosa più complessa se il sesso corrisponde a M esiste l’informazione Barba nel record altrimenti il record sarà lungo un byte in meno.

Per leggere da un file binario, bisonga determinare la lunghezza del buffer da leggere riempiendo il buffer del numero di caratteri che si vuole leggere.

Per cui la lettura del (primo record dal ) tracciato record indicato sarà il seguente:

Dim NomeLogico as Integer
Dim NomeFisico as Integer
Dim Buffer as String
NomeLogico = FreeFile
NomeFisico = "c:\Esempio\immagine.bmp"
Open NomeFisico For Binary Access Read Lock Write As NomeLogico

' Leggo il Cognome
Buffer = Space$(30)
Posizione = 1
Get NomeLogico, Posizione, Buffer

' Leggo il Nome
Posizione = Posizione + 30
Buffer = Space$(20)
Get NomeLogico, Posizione, Buffer

' Leggo il Eta
Posizione = Posizione + 20
Buffer = Space$(20)
Get NomeLogico, Posizione, Buffer

' Leggo il Sesso
Posizione = Posizione + 3
Buffer = Space$(1)
Get NomeLogico, Posizione, Buffer

If(Buffer="M") then
    ' Leggo se ha la barba solo se è di sesso Maschile (M)
     Posizione = Posizione + 1
     Buffer = Space$(1)
     Get NomeLogico, Posizione, Buffer
End If
...

La scrittura in un file ad accesso binario è regolata dalle stesse modalità di un file ad accesso casuale.

Conclusioni

Questo articolo era stato scritto inizialmente per VBProgrammer un sito che curavo diversi anni fa. Oggi ho voluto riprendere l’articolo e renderlo più ricco rispetto alla sua forma iniziale.

Buona programmazione a tutti!

Una piccola nota storica

La prima volta che ho pubblicato questo articolo è stato nel Giugno 2002 su un sito da me prodotto che trattava di Visual Basic. Successivamente lo avevo riportato anche nella vecchia versione del sito diegolamonica.info. Per memoria storica e, poichè è stato il mio primo articolo pubblicato sul Web, ho deciso di riportarlo tra queste pagine.

%d blogger hanno fatto clic su Mi Piace per questo: