In Visual Basic è supportata la gestione dei file sia tramite procedure classiche (FileOpen, Input, Put, Close) che tramite .NET API (System.IO.StreamReader, StreamWriter, FileStream). È considerato preferibile utilizzare le classi .NET.
Sfumature:
Using per liberare automaticamente le risorse.StreamReader/StreamWriter, per i byte — FileStream.Esempio di codice:
Dim filePath As String = "test.txt" ' Scrittura nel file Using writer As New StreamWriter(filePath) writer.WriteLine("Hello, world!") End Using ' Lettura dal file Using reader As New StreamReader(filePath) Dim content As String = reader.ReadToEnd() End Using
Cosa succede se non si chiude il flusso dopo aver scritto nel file tramite StreamWriter, e perché è importante utilizzare la struttura Using?
Risposta:
Se non si chiude il flusso (non si chiama Close o non si utilizza Using), i dati bufferizzati potrebbero non essere scritti sul disco, poiché il sistema operativo li tiene in memoria. Inoltre, un flusso non chiuso trattiene un descrittore di file, e il file potrebbe essere bloccato per altri processi, il che porta a perdite di memoria e risorse in applicazioni a lungo termine. La struttura Using garantisce la chiamata a Dispose anche in caso di eccezione.
Storia
Improvvisa mancanza di dati: Durante la generazione di rapporti in banca, lo sviluppatore non ha chiuso
StreamWriter. Di conseguenza, parte dei dati non è stata scritta nel file a causa del buffer non liberato, il servizio clienti non riusciva ad aprire i rapporti finali.
Storia
Perdita di descrittori di file: Nel sistema ERP, gli sviluppatori utilizzavano l'apertura manuale dei file e spesso dimenticavano di chiamare
Close. Dopo alcuni giorni, l'applicazione si bloccava per esaurimento del limite di file aperti.
Storia
Conflitto di blocco dei file: In un servizio di backup di rete, il file veniva aperto senza la modalità di accesso corretta, bloccando l'accesso ad altri programmi e causando lunghi fermi in tutto il reparto.