VB.NET – Come leggere i file TXT

Oggi vedremo come potete leggere i file TXT direttamente da un vostro programmino Visual Basic .NET. Per iniziare dovete importare nel vostro progetto la libreria System.IO, la quale ci semplificherà la vita nella lettura del nostro file TXT. Io ho disegnato una form come nella immagine qua sotto:

Questa mia form ha questi oggetti:

  • Una label
  • Una TextBox per vedere il percorso del file selezionato
  • Un Bottone per aprire la FileDialog
  • Una ListBox dove scrivere il risultato di ogni riga letta dal TXT

Nel evento click del pulsante aggiunto scrivete queste righe di codice per leggere il file TXT:

Dim sr As StreamReader = Nothing
Dim riga As String = Nothing

Dopo aver dichiarato queste variabili scrivete il blocco Try…Catch per intercettare gli errori e li dentro scrivete:

Try
‘Imposto il filtro del mio file dialog a TXT e imposto anche la directory di start del file dialog alla cartella documenti
opFile.Filter = “File txt (*.txt)|*.txt”
opFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
‘Non permetto la selezione multipla di file
opFile.Multiselect = False
‘Avvio la finestra di selezione file
opFile.ShowDialog()

Dopo aver selezionato il file:

‘Controllo se il file esiste (evito errori quando creo una nuova istanza della variabile sr)
If File.Exists(opFile.FileName) Then
‘Pulisco la ListBox ogni volta che leggo un nuovo file
ListBox1.Items.Clear()
tbPath.Text = opFile.FileName
sr = New StreamReader(opFile.FileName)
‘Leggo le righe fino a quando non arrivo alla fine
riga = sr.ReadLine()
While Not riga Is Nothing
ListBox1.Items.Add(riga)
riga = sr.ReadLine()
End While
End If

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Il risultato di questa funzione la vedete nella immagine qua sotto:

Questo è tutto. Domani vi faccio vedere come scrivere un file TXT o creare un file di LOG per la vostra applicazione. Ciao e buona programmazione.

14 thoughts to “VB.NET – Come leggere i file TXT”

  1. ciao bilbo ho una domanda da farti non so come fare per mandare a capo, nella lettura di un file di testo dentro un list, le righe nel listbox. misai dire come si fa?
    grz.

  2. Ciao Luca,
    Devi leggere o scrivere in una listbox?
    per leggere devi scorrere tutte le righe della listbox in questo modo:
    for j as integer = 0 to lbTua.Items.Coun – 1
    lbTua.Items.Item(j)
    next

    Per aggiungere voci alla tua listbox devi soltanto fare add di un nuovo item cosi:
    lbTua.Items.Add(“TESTO CHE VUOI AGGIUNGERE”)

    Spero di essere stato chiaro. Ciao

  3. Io vorrei fare questo:
    Leggere da un file una serie di righe dove per ogni riga c’è un link and un sito web.
    Dunque ogni riga rappresenta un sito da navigare.
    Qualcuno di questi siti è attivo , qualcun altro no, per cui il programma deve
    tentare ad uno i collegamenti finchè non trova il primo di questi che funziona.
    Il programma dunque apre il file legge la prima riga e tenta la navigazione.
    Se non funziona prova con la seconda e così via ecc.
    Quando raggiunge lo scopo, cioè un sito risponde , interrompe la lettura e semplicemente resta connesso con il link che ha funzionato.

    Apri file

    do
    Leggi riga
    naviga il sito della riga
    loop finchè non ho connesso ad un sito funzionante

    chiudi file

    il codece necessario al web browser è già stato montato quindi mi basta costruire questo ciclo.
    Ciao.
    Suscusa ho duplicato la richiesta perchè avevo sbagliato la mia email per la risposta

  4. Ciao Giunluca potresti fare una cosa del genere secondo me:

    Leggi fino a quando la riga non è nothing è una variabile che dichiari prima è false

    While Not riga Is Nothing or Not TuaVaribileDiControlloConnessione

    TuaVaribileDiControlloConnessione = FunzioneControlloURL(riga )

    riga = sr.ReadLine()
    End While

    La funzione di controllo potrebbe essere fatta così:

    Dim url As New System.Uri(ValoreLetto)
    Dim req As System.Net.WebRequest

    req = System.Net.WebRequest.Create(url)

    Dim resp As System.Net.WebResponse

    Try
    resp = req.GetResponse()

    resp.Close()

    req = Nothing

    return true

    Catch ex As Exception
    req = Nothing
    Return False
    End Try

    Questo penso che sia tutto. Se ho frainteso qualcosa fammi sapere.
    Ciao

  5. Ecco qua il codice che ho messo a punto anche per merito dei tuoi ottimi consigli ( solo piccoli cambiamenti per renderlo a me più famigliare) :

    ______________________
    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click

    Dim leggi As System.IO.StreamReader
    Dim riga As String
    Dim sitorilevato As Boolean

    ‘Pulisco la ListBox ogni volta che leggo un nuovo file
    ListBox1.Items.Clear()

    sitorilevato = False

    Try

    leggi = OpenText(“C:\wlmirrors.txt”)

    While leggi.Peek -1 Or sitorilevato = False

    riga = leggi.ReadLine()
    sitorilevato = funzionecontrolloURL(riga)

    ListBox1.Items.Add(riga)

    End While
    leggi.Close()

    Catch ex As Exception

    End Try
    ListBox1.Items.Add(riga)
    WebBrowser1.Navigate(“http:\\www” + riga)

    End Sub
    _______________________________________

    Public Function funzionecontrolloURL(ByVal riga As String)

    Dim url As New System.Uri(riga)
    Dim req As System.Net.WebRequest

    req = System.Net.WebRequest.Create(url)

    Dim resp As System.Net.WebResponse

    Try
    resp = req.GetResponse()

    resp.Close()

    req = Nothing

    Return False

    Catch ex As Exception
    req = Nothing
    Return True
    End Try

    End Function
    ____________________________________

    Sai quale è il problema ?
    Che la funzione di controllo restituisce il valore true anche se appena il sito viene rilevato ma poi dopo aver caricato un certo numero di byte quel sito non risponde più.
    Io vorrei che il programma se ne accorgesse e passasse all’url proposto nella riga successiva del file che ho letto per per riprovare in automatico ed in cascata con un altro server finchè non trova una risposta compiuta di caricamento totale della pagina , mentre il browser si inchioda sulla pagina incriminata accidenti.

    Non è mica facile sta roba .

  6. Facile non lo è…
    Puoi provare a inserire nel tuo ciclo While anche questo:

    WebBrowser1.Navigate(“http:\\www” + riga)

    if not WebBrowser1.IsBusy then
    exit for
    end if

    e poi fuori dal for carichi la listbox.

    Ti do un consiglio… Non mettere mai del codice fuori dal TryCatch.. Solo le dichiarazioni delle varibili..

  7. L’esempio di come leggere un file testo non funziona.
    opFile deve essere dichiarato
    CommonDocument non è un membro di System.Enviroment.SpecialFolder

  8. Basta che la import nella tua clase.. Il System.IO si trova nella System.dll del target framework del tuo progetto. Di solito questo assembly è già linkato nel progetto.

  9. Ciao bilbo avrei una domanda da farti.Avrei bisogno che nella mia textbox quando clicco sul bottone mi visualizzi un file di testo che ho sul server del mio sito e non sul pc!credo che sia possibile ma non ho idea di come fare!HELP ME !!!sono disposto anche a pagarti basta che mi risolvi questa cosa!!GRAZIE IN ANTICIPO !!!

  10. Ciao Alessandro,
    La lettura del file che sia locale o sul server si fa nello stesso modo, l’importante e che tu possa raggiungere il file. Se non hai direttamente accesso al server, ma qualche utenza configurata ha accesso, devi utilizzare l’IMPERSONATE di Windows per accedere con l’utente X configurato. Se invece nessuno ha accesso diretto al server l’alternativa più usata è usare un WebService che ti restituisce il file come binario, tu lo appoggi su una cartella sul tuo filesystem e poi lo leggi con la procedura spiegata qua.
    Spero di esserti stato di aiuto.
    Ciao

  11. Salve vorrei fare una cosa simile a quello che voleva fare Gianluca però deve provarli tutti uno per uno fino alla fine delle righe, senza interruzioni e deve caricare la pagina fino alla fine. Se mi postassi il codice sarei molto contento

  12. Dovrei risolvere un piccolo problema:
    Ho preparato un programmino di login ad una cartella nascosta, che, invece di usare la solita username e pwd, usa 4 numericupdown, come un codice pin, con poche righe di codice ho risolto e funziona, ora il problemino è questo, il pin inserito nel codice vorrei si potesse cambiare, avevo pensato ad un file di testo che, editato mi consentisse di cambiare il pin, ma, non so se è possbile far leggere ai controlli NUD il valore di ciascuno dal file di testo, il codice usato è:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If Nud1.Value = 1 And Nud2.Value = 9 And Nud3.Value = 6 And Nud4.Value = 3 Then
    Dim collegamento As String = “D:\Test”
    Process.Start(collegamento)
    Me.Close()
    Else
    MessageBox.Show(“Pin Errato!”, “Cassaforte”, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End If

    End Sub
    Grazie mille per gli eventuali suggerimenti.
    Manuel

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.