Gestione dei files


Assegnazione e apertura

A ogni file che viene aperto deve essere assegnato un numero (tra 1 e 155), il quale sarà strettamente legato al nome fisico che servirà a indicare il file presente all'interno del disco. Il numero sarà quello utilizzato all'interno del programma per far riferimento al file stesso. Questa attività avviene con il comando di apertura Open che indica anche le modalità di accesso al file.

File sequenziale

File diretto

Open "nome_file" For Input As #Numerofile

Open "nome_file" For Random As #Numerofile Len = Len(Tiporecord)

Al file nome_file viene assegnato il numero Numerofile e reso disponibile per la lettura sequenziale.

I dati possono essere letti e scritti. I record sono elaborati in un qualsiasi ordine. Deve essere definita la lunghezza del singolo record del file (Tiporecord).

   

Open "nome_file" For Output As #Numerofile

In questo caso i dati verranno scritti sul file a partire dall'inizio, cancellando eventuali dati già presenti.

 

Open "nome_file" For Append As #Numerofile

I dati verranno scritti alla fine del file, dopo eventuali dati già presenti.


Lettura

A seconda del tipo di file usato, cioè alla modalità di apertura, vi sono varie modalità di lettura.

File sequenziale

File diretto

Input #Numerofile, Vari, Var2

Get #Numerofile, Numrec, NomeRecord

Nel caso di file sequenziali, vengono letti sequenzialmente i valori presenti nei campi del file e caricati nelle variabili indicate.

Usato nei file ad accesso random, carica nella variabile NomeRecord il record che si trova nel file alla posizione indicata da Numrec. Se Numrec non viene specificato viene letto il record successivo all'ultimo dato elaborato.

Input #3, Nome, Cognome, Indirizzo

Get Numfile, 5, Persona

I primi tre campi presenti nel file aperto con il numero 3 verranno caricati nelle variabili Nome, Cognome e Indirizzo.

Caricherà nella variabile Persona (che sarà dello stesso tipo strutturato dei record presenti nel file) il quinto record.


Scrittura

Anche le istruzioni di scrittura variano in base al tipo di file usato e alla modalità di apertura.

File sequenziale

File diretto

Write #Numerofile, Vari, Var2

Put #Numerofile, Numrec, NomeRecord

Usato nei file sequenziali i valori presenti nelle variabili indicate vengono scritti sequenzialmente nel file.

Viene usato nei file ad accesso Random, e carica nel record che si trova nel file alla posizione indicata da Numrec il contenuto della variabile NomeRecord. Se Numrec non viene specificato viene scritto il record successivo.

Write #3, Nome, Cognome, Indirizzo

Put Numfiie, 5, Persona

I contenuti delle variabili Nome, Cognome e Indirizzo vengono caricati come campi 4ifferenti nel file aperto con il numero 3.

Il contenuto della variabile Persona (che sarà dello stesso tipo strutturato dei record presenti nel file> sarà caricato nella quinta posizione del file.


Chiusura

Close #Numerofiie
Chiude il file identificato da Numerofile.

Close
Chiude tutti i file aperti.

Funzioni utili

File sequenziale File diretto
seek (Numerofile) seek (Numerofile)

Se il file è sequenziale (aperto in modalità Output, Append o Input) indica la posizione di byte nella quale l'operazione successiva verrà eseguita (il primo byte di un file si trova nella posizione 1, il secondo byte nella posizione 2 etc.)

Se il file è random restituisce la posizione (numero del record) del record successivo letto o scritto nel file.
numfile = FreeFile
Open "nome_file" For input As Numfile
per agevolare la gestione dei numeri da assegnare ai file da aprire, evitando errori, esiste la funzione FreeFile che restituisce un numero di file non ancora utilizzato.
eof (Numfile) eof (Numfile)

Si tratta di una funzione booleana che restituisce il valore vero se il file (aperto in precedenza in modalità Input) è finito (se siamo posizionati al fondo del file), altrimenti quello falso. È consigliabile utilizzare la funzione EOF per evitare errori dovuti al tentativo di leggere altri dati dopo aver raggiunto la fine del file. Con i file aperti in modalità Output , EOF restituisce sempre True.

Il valore vero alla funzione viene attribuito dalla lettura dell'ultimo record del file stesso.

Si tratta di una funzione booleana che restituisce il valore vero se il file (aperto in precedenza in modalità Random) è finito (se siamo posizionati al fondo del file), altrimenti quello falso. La funzione restituirà False anche se l'ultima istruzione Get eseguita non è stata in grado di leggere un intero record. È consigliabile utilizzare la funzione EOF per evitare errori dovuti al tentativo di leggere altri dati dopo aver raggiunto la fine del file.

  Lof (Numfile)
Tale funzione restituisce il numero di byte presenti nel me indicato dal numero Numfile.

Per sapere quanti sono i record presenti in un file random, basta dividere il valore restituito dalla funzione Lof per la dimensione di un record restituito dalla funzione Len.

Numero_di_record = Lof(Numfile)/Len(TipoRecord)

Istruzione With

Quando si opera con i files diretti può essere conventiente utilizzare l'istruzione With per eseguire una serie di istruzioni su un oggetto specificato senza ripetere il nome dell'oggetto. Se, ad esempio, si desidera assegnare dei valori immessi da tastiera a campi di un file diretto su può operare come segue:

Private Type auto

codmod As Byte
codcon As Byte
dati As String * 50

End Type
Dim recordauto As auto

<<<< Viene definito il tracciato record di un file diretto
:
 
Private Sub mnuCancella_Click()  

With recordauto

.codmod = txtmodello.Text
.codcon = txtconcessionario.Text
.dati = txtaltro.Text

End With

<<<< Vengono usati i campi del record che altrimenti andrebbero scritti come:


recordauto.codmod = txtmodello.Text
recordauto.codcon = txtconcessionario.Text
recordauto.dati = txtaltro.Text

Put #1, I, recordauto

End Sub

 

È possibile nidificare le istruzioni With inserendo un blocco With all'interno di un altro. I membri dei blocchi With esterni sono tuttavia nascosti dai blocchi With interni ed è pertanto necessario inserire in un blocco interno With un riferimento completo all'oggetto per qualsiasi membro di un oggetto incluso in un blocco With esterno.

L'oggetto APP

L’oggetto App viene fornito dalla libreria di Visual Basic e rappresenta l’applicazione in esecuzione; questo oggetto espone diverse proprietà e metodi.
La proprietà Path restituisce il percorso del file eseguibile (se il programma è eseguito come file EXE autonomo) o del progetto salvato (se eseguito all’interno dell’ambiente).

L'oggetto App, abbinato alla proprietà path, se usato nell'istruzione Open dei file consente di aumentarne la portabilità infatti un file così gestito può essere spostato ovunque, insieme all'applicazione che lo gestisce, senza problemi.

Su