2012-05-10 20 views
8

Di seguito è quello che ho usato. Mentre funziona, il mio programma si blocca quando si tenta di contare un file piuttosto grande, ad esempio 10.000 o più righe. I file più piccoli vengono eseguiti in pochissimo tempo.Esiste un modo migliore per contare le righe in un file di testo?

C'è un modo migliore o dovrei dire più veloce per contare le linee in un file di testo?

Ecco quello che sto attualmente in uso:

Dim selectedItems = (From i In ListBox1.SelectedItems).ToArray() 
    For Each selectedItem In selectedItems 
     ListBox2.Items.Add(selectedItem) 
     ListBox1.Items.Remove(selectedItem) 

     Dim FileQty = selectedItem.ToString 
     'reads the data file and returns the qty 
     Dim intLines As Integer = 0 
     'Dim sr As New IO.StreamReader(OpenFileDialog1.FileName) 
     Dim sr As New IO.StreamReader(TextBox1_Path.Text + "\" + FileQty) 
     Do While sr.Peek() >= 0 
      TextBox1.Text += sr.ReadLine() & ControlChars.CrLf 
      intLines += 1 
     Loop 
     ListBox6.Items.Add(intLines) 
    Next 

risposta

27
Imports System.IO.File 'At the beginning of the file 

Dim lineCount = File.ReadAllLines("file.txt").Length 

Vedi this domanda.

+0

Molto bello ... ho dovuto modificarlo un po 'per VB ma sembra giorno e notte da prima! – Muhnamana

+3

Lol, tweak. La risposta era già in VB, ma ha accidentalmente aggiunto il punto e virgola. Scusa, ho fatto la legge e ho dovuto farlo notare. – Suamere

2

Anche se si rende l'iterazione più efficiente possibile, se si consegna un file sufficientemente grande si blocca l'applicazione mentre esegue il lavoro.

Se si desidera evitare il blocco, è possibile generare un nuovo thread ed eseguire il lavoro in modo asincrono. Se stai usando .NET 4.0 puoi usare la classe Task per renderlo molto semplice.

0
TextBox2.Text = File.ReadAllLines(scannerfilePath).Length.ToString() 
Problemi correlati