Aprire File – Codice VB.NET
Aprire file: come fare a gestire e a leggere un certo numero di byte, da qualsiasi tipo di file.
Introduzione
Il listato seguente permette di aprire file di qualsiasi formato: testo, immagine, audio, pdf ecc. Per il programmatore potrebbe essere molto utile avere il codice già pronto e tale da gestire l’ apertura del file su cui effettuare le più svariate operazioni. Si potrebbe dover criptare/decriptare un file di testo; si potrebbe voler analizzare solo N byte che rappresentano ad esempio la temperatura dell’aria e cosi via… In questo modo aprire file e gestirli diventa molto semplice.
Imports System.IO
Public Function ingAC_APRI_FILE(Percorso_File As String, Buffer As Integer, Modalita_Errore As Boolean) As Byte
ingAC_APRI_FILE = 0 'di default tutto ok
Dim LMax As Long = 2 ^ 24 ' 16MB : dimensione max matrice (piu grande = piu tempo)
If Not File.Exists(Percorso_File) Then
If Modalita_Errore Then MsgBox("Errore 1: File inesistente.")
Return 1 ' file non esistente ritorna 1 e ferma l'esecuzione
Else
Dim FLen As Long = FileLen(Percorso_File)
If Buffer < 0 Then
If Modalita_Errore Then MsgBox("Errore 2: Il Buffer non può essere negativo.")
Return 2 ' errore dimensioni buffer ritorna 2 e ferma l'esecuzione
Else
If Buffer = 0 And FLen < LMax Then Buffer = FLen ' buffer coincide con tutto il file
If FLen > LMax Then
Buffer = LMax
ingAC_APRI_FILE = 3
If Modalita_Errore Then MsgBox("Errore 3: La lunghezza del file è maggiore del massimo consentito.") 'legge fino al max impostato, ritorna 3 e continua
End If
End If
Try
Using fs As FileStream = New FileStream(Percorso_File, FileMode.Open, FileAccess.Read)
Dim b(Buffer - 1) As Byte
Dim CountByte As Integer = Buffer
Dim OffsetByte As Integer = 0
While (CountByte > 0)
'Controlla se restituisce zero, nel qual caso smette di leggere
Dim n As Integer = fs.Read(b, OffsetByte, CountByte)
'Se n è zero termina il ciclo
If (n = 0) Then
Exit While
End If
OffsetByte = (OffsetByte + n)
CountByte = (CountByte - n)
Application.DoEvents()
'inserire qui dentro le operazioni da
'effettuare durante il caricamento in b
'ad esempio un indicatore di avanzamento
End While
CountByte = b.Length
End Using
Catch ex As Exception
If Modalita_Errore Then MsgBox("Errore 4: " & ex.Message)
Return 4 ' errore durante il caricamento del file, ritorna 4 e ferma l'esecuzione
End Try
End If
End Function
Come funziona
Il funzionamento è semplice. La funzione che si occupa di tutto è ingAC_APRI_FILE(Percorso_File As String, Buffer As Integer, Modalita_Errore As Boolean) che ha come ingresso il Percorso_File e la dimensione del Buffer (ossia quanti byte alla volta si vogliono leggere/analizzare). Con modalita_errore in True la funzione in caso di errore avvisa con un msgbox dell’errore.
Come output restituisce un valore numerico positivo, corrispondente a un eventuale errore; oppure zero se è tutto ok. Ovviamente si potrebbe voler far restituire alla funzione una stringa esplicativa oppure direttamente il risultato delle operazioni condotte sui file.
Di default la funzione restituirà il valore “zero” a meno che, effettuato il primo controllo “if”, il file non sia presente: in questo caso verrà restituito il valore “1”. Se è tutto ok il codice prosegue controllando che il buffer dato in input non sia minore o uguale a zero oppure che non sia troppo grande. Il valore di 16MB sembra adeguato come massimo, ma potrebbe anche essere aumentato o diminuito.
Nel caso in cui sia possibile, ponendo in input “Buffer”=0, lo si farà coincidere con la dimensione del file, oppure con il valore massimo impostato a 16MB. In quest’ultimo caso la funzione restituirà, salvo altri errori, il valore “3”. A questo punto, all’interno di un Try-Catch-End Try, al fine di prevenire tutti gli errori possibili, si procede con l’apertura del file in questione (i vari parametri da inserire/modificare li trovate su MSDN) e con un Do While – Loop si procede alla lettura di “Buffer” byte.
Terminato il loop senza errori, si avrà l’array “b” riempito con i byte del file impostati con “buffer”; viceversa la funzione restituirà “4”. Questo array “b” potrà quindi essere copiato in un altro array, magari pubblico, sul quale operare agevolmente da ogni parte del listato del vostro progetto. Una modifica interessante potrebbe essere quella di gestire e caricare una serie di N byte per volta, avanzando fino alla fine del file.
Infine, ricordate di inserire Imports System.IO per poter usare la funzione ingAC_APRI_FILE ().
Link utili:
- Open File su MSDN Microsoft
- Visual Studio Microsoft
- Download Gratuiti per lo Sviluppo Software Microsoft