File Input String – Codice VB.NET
File Input String : come prendere da un qualsiasi file una porzione di N byte da una sua qualsiasi posizione.
Introduzione
A molti programmatori, specie se alle prime armi, sarà capitato di voler leggere da un file solo N byte, posizionati in un punto X, specifico di esso: le classiche istruzioni lineinput o input non servono a molto. Ad esempio si potrebbe vole leggere solo i primi 1024 byte (l’intestazione del file) dove di solito sono contenute le informazioni dello stesso, oppure si è creato un file organizzato in X serie da N byte (i cosiddetti record): le applicazioni sono pressoché infinite. Si tratta quindi di un codice vbnet per il file input string.
Imports System.IO Public Function ingAC_INPUT_DA_FILE(Percorso_File As String, Posizione As Long, Buffer As Integer, Modalita_Errore As Boolean) As String ingAC_INPUT_DA_FILE = Nothing ' Nothing di default If Not File.Exists(Percorso_File) Then If Modalita_Errore Then MsgBox("Errore 1: File inesistente.") Return Nothing ' file non esistente ritorna Nothing e ferma l'esecuzione Else Dim FLen As Long = FileLen(Percorso_File) If Buffer < 0 Or Buffer > FLen Then If Modalita_Errore Then MsgBox("Errore 2: Dimensioni del Buffer non corrette: min= 0, Max=dim File=" & FLen) Return Nothing ' errore dimensioni buffer ritorna Nothing e ferma l'esecuzione End If If Posizione < 0 Or Posizione * Buffer > FLen Then If Modalita_Errore Then MsgBox("Errore 3: La posizione va oltre i limiti consentiti: Attuale:" & Posizione * Buffer & "min= 0, max=dim File=" & FLen) Return Nothing ' errore posizionamento ritorna Nothing e ferma l'esecuzione End If Dim b(Buffer - 1) As Byte Try Using fs As FileStream = New FileStream(Percorso_File, FileMode.Open, FileAccess.Read) Dim CountByte As Integer = Buffer Dim OffsetByte As Integer = 0 While (CountByte > 0) 'Controlla se restituisce zero, nel qual caso smette di leggere fs.Seek(Buffer * Posizione, 0) 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 Nothing ' errore durante il caricamento del file, ritorna Nothing e ferma l'esecuzione End Try If Posizione * Buffer + Buffer > FLen Then ReDim Preserve b(Buffer - (Posizione * Buffer + Buffer - FLen) - 1) End If Dim Conversion As String = System.Text.Encoding.UTF-8.GetString(b) Return Conversion End If End Function
[/codesyntax]
Come funziona
La funzione ingAC_INPUT_DA_FILE(Percorso_File As String, Posizione As Long, Buffer As Integer, Modalita_Errore As Boolean) si occupa del file input string: basta inserire il Percorso_File che contiene percorso e nome del file insieme; poi immaginando di aver suddiviso idealmente il file in blocchi da N byte indichiamo tramite Posizione quale blocchettino si vuole leggere. Quindi Buffer indica la quantità di byte in cui è suddiviso il file e Posizione è la posizione del pacchetto di N byte. Con modalita_errore in True la funzione, se è il caso, avvisa con un msgbox del tipo di errore.
Il funzionamento è semplice, si effettuano i vari controlli preliminari e con seek ci si posiziona nel punto del file da cui si vuole iniziale la lettura; si procede col riempire il buffer. In output l’autore ha deciso di fare restituire una stringa contenente gli N byte letti dalla posizione X. Una nota: per la conversione da array di byte in string finale, si è usato System.Text.Encoding.UTF-8 che permette, secondo le esigenze di “encodare” anche in Unicode, Ascii, etc. Per cui il nostro file input string si può considerare bello e pronto.
Nota: ricordarsi di Imports System.IO in testa al listato, per poter usare la funzione ingAC_INPUT_DA_FILE().
Link utili:
- Open File su MSDN Microsoft
- MSDN -> matrice di byte in string
- MSDN -> funzione Seek
- Visual Studio Microsoft
- Download Gratuiti per lo Sviluppo Software Microsoft