<%@ Page Language="VB" ResponseEncoding="iso-8859-1" Inherits="AACPage" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.Oledb" %> <%@ import Namespace="System.Data.ODBC" %> <%@ Register TagPrefix="aac" TagName="header" Src="~/header.ascx" %> <%@ Register TagPrefix="aac" TagName="footer" Src="~/footer.ascx" %> <%@ Register TagPrefix="aac" TagName="telaioHeader" Src="~/service/include/telaio_header.ascx" %> <%@ Register TagPrefix="aac" TagName="telaioFooter" Src="~/service/include/telaio_footer.ascx" %> <%@ Register TagPrefix="aac" TagName="autoreFile" Src="~/service/include/autore_file.ascx" %> <%@ Register TagPrefix="aac" TagName="aggiornamenti" Src="~/service/include/aggiornamenti.ascx" %> <%@ Register TagPrefix="aac" TagName="ultimiPost" Src="~/forum/inc_ultimi_post.ascx" %> <%@ Register TagPrefix="aac" TagName="ultimiPost3" Src="~/forum/inc_ultimi_post_nuovo.ascx" %> <%@ Register TagPrefix="aac" TagName="aspect" Src="~/service/include/aspect.ascx" %> <%@ Register TagPrefix="aac" TagName="adsenseGenerator" Src="~/service/include/adsense_generator.ascx" %> <% 'Il controllo per il paging correntemente è registrato qua e là, ma andrebbe 'eliminato da tutte le parti e messo qui '<'%@ Register TagPrefix="aac" TagName="paging" Src="~/service/include/paging.ascx" %'> %> ArcadiA Club - Visual Basic | Leggere un file in VB6 come binario <% sez_id = 18 immm = "programmazione" categoria = 1 #CONST aspect_asp = 0 forum_id_asp = "16" sc_asp = 1 %> <%-- --%>
 
- Leggere un file in VB6 come binario (passo 3) -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario Microsoft Visual Basic 6 - Conoscenze basiche di VB
Utilizzo di Input con metodo For Binary e dell'istruzione Get

LEGGERE BYTE DA UN FILE
Terzo passo: utilizzo di Get e Open For Binary.

In questo passo spiegheremo come leggere un file trattando i dati come binari ovvero non servendoci di stringhe, ma posizionando i dati in un array di byte. In questa maniera i dati non verranno interpretati da Visual Basic ma saranno letti esattamente come sono scritti su disco.

  • TextBox:
    • Name: Risultato
    • Text: (nulla)
    • ScrollBars: 2 (verticali)
    • Multiline: True
    • Utilità: in essa scriveremo ogni dato letto dal file.
  • Button
    • Name: OpenClose
    • Caption: Apri
    • Enabled: False
    • Utilità: questo pulsante serve per aprire e chiudere il file.
  • Button
    • Name: DoGet
    • Caption: Get
    • Utilità: premendo questo pulsante si leggeranno il numero di byte specificato in NumByte o l'intero file se Tutto è selezionato.
  • TextBox
    • Name: NumByte
    • Caption: 1
    • Utilità: qui viene specificato il numero di byte che verranno letti premendo DoGet (questa casella non avrà effetto se Tutto è selezionato)
  • CheckBox
    • Name: Tutto
    • Caption: Tutto
    • Value: 0 (unchecked)
    • Utilità: se selezionato, al premere di DoGet verrà letto l'intero file e riportato in Risultato
  • Label
    • Name: TotByteText
    • Caption: Byte letti: 0
    • Utilità: numero di byte letti.
  • TextBox
    • Name: OpenFile
    • Text: C:\Prova.txt
    • Utilità: qui potremo specificare il file al quale accedere.

Ora non resta che fare in modo che cliccando su OpenClose se non ci sono file aperti si apra quello specificato in OpenFile, altrimenti (OpenClose.Caption="Chiudi") chiuda l'ultimo aperto; essendo questo processo pressoché identico a quello dello Step 1, riportiamo di seguito solo i cambiamenti salienti:


Open OpenFile.Text For Binary As #1
FileLength = FileLen(OpenFile.Text)

La sostanziale differenza è che il metodo di lettura non è più For Input ma For Binary, questo ha degli effetti che vedremo nella Sub che segue. FileLength è una variabile in cui viene memorizzata la lunghezza del file cosicché sia possibile leggerlo per intero. Naturalmente la variabile FileLength va dichiarata in cima al codice come Long.

Dim FileLength As Long

Vediamo ora la Sub DoGet_Click, che corrisponde a Inpt_Click del primo Step. Anche qui la maggior parte dei cambiamenti sono formali. La cosa veramente importante è come viene effettuata la lettura dal file: non si utilizza più Input o Line Input ma Get.


Dim Prendi() As Byte
ReDim Prendi(NumByte - 1)
Get #1, , Prendi

  • Dim Prendi() As Byte: dichiariamo un array di Byte chiamato Prendi, dove verranno memorizzati i dati letti dal file.
  • ReDim Prendi(NumByte - 1): diamo una dimensione a Prendi pari al numero di byte che si desidera leggere dal file.
  • Get #1, , Prendi: chiamiamo l'istruzione Get sul file #1 e con un riferimento a Prendi; il secondo parametro è stato omesso, indicherebbe il punto di partenza da cui iniziare a leggere.

A questo punto avremo un array di byte letti dal file. Ecco una semplice funzione per mostrarli all'utente come stringa in formato esadecimale:


Private Function ByteArrayToString(arr() As Byte) As String
    Dim C1 As Integer
    Dim Output As String
    For C1 = LBound(arr) To UBound(arr)
        If arr(C1) < 16 Then
            Output = Output & "0" & Hex(arr(C1)) & " "
        Else
            Output = Output & Hex(arr(C1)) & " "
        End If
    Next C1
    ByteArrayToString = Output
End Function

Abbiamo così concluso la serie di articoli su come leggere e scrivere file in Visual Basic 6.
 

<< INDIETRO by VeNoM00