Codice per lettura byte di un file txt

giovedì 26 gennaio 2006 - 10.57

trinity Profilo | Guru

ragazzi io ho scritto questo codice solo che l'avanzamento della progressbar non funziona correttamente e poi il contenuto del file txt non viene letto correttamente:

Dim fs As Stream = File.OpenRead(Me.Label7.Text)
Dim sr As StreamReader = New StreamReader(fs)
'ottengo le dimensioni del file che viene letto
Dim long_file As Int32 = fs.Length
Const BufferSize As Integer = 1024
Dim buffer(BufferSize - 1) As Byte
Me.ProgressBar1.Minimum = 0 : Me.ProgressBar1.Maximum = long_file
Try
Dim line As String
Do
line = sr.ReadLine()
If line = "" Then
Exit Do
End If
Me.ListBox1.Items.Add(line)
Dim linebyte As Int32 = fs.Read(buffer, 0, buffer.Length)
ProgressBar1.Value += linebyte
Loop
Catch
MsgBox(Err.Description)
End Try
fs.Close()
sr.Close()
Me.ProgressBar1.Value = 0
System.Windows.Forms.Application.DoEvents()


Mi potete dire dove sbaglio e se comunque c'è un metodo migliore??

mi sono dimenticato di dire che in sostanza io ho un file txt, riesco a sapere la dimensione in byte del flusso utilizzando la proprietà fs(FileStream).Length al suo interno vi sono una serie di stringhe del tipo:

1,rossi mario,Roma
2,verdi mario,Napoli
3,rossi mario,Roma
4,verdi mario,Napoli
5,rossi mario,Roma
6,verdi mario,Napoli
7,rossi mario,Roma
8,verdi mario,Napoli

io devo leggere da primo all'ultimo di questi record, solo che vorrei avere una progressbar che avanzi mentre legge tutti i record..
con il seguente metodo:

dim Line as String
Line=sr.ReadLine
Dim bytecount() As Byte= Encoding.Default.GetByteS(line)
dim nbyte as Integer= bytecount.lenght
riesco a sapere il valore in byte di ogni stringa ma all'interno del flusso che ovviamente sarà diverso dal valore della dimensione che occupano sul disco...quindi impostando il valore Maximum della progressbar = fs(FileStream).Length e il valore di Value della progressbar = nbyte non funziona perchè l'avanzamento del Progressbar non è coerente visto che il valore di nbyte non è quello reale su disco..

Come posso fare?

Ciao

Brainkiller Profilo | Guru

>Come posso fare?

L'unica cosa che mi viene in mente per ora, è fare un ciclo sul file una prima volta, e contando le linee con la ReadLine.
Se esce che sono 3530 linee imposti il Max Value della progressbar a 3530 e poi ricominci con la lettura vera e propria, incrementando per ogni chiamata di ReadLine() la progressbar value di 1.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5