Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Byte letti dallo StreamReader
venerdì 31 ottobre 2008 - 11.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
RekLats
Profilo
| Newbie
13
messaggi | Data Invio:
ven 31 ott 2008 - 11:43
ciao...
come si fa a conoscere "in tempo reale" quanti byte sono stati letti da un'oggetto StreamReader?
Ho un programma che fa la lettura/parsing di un file di testo, "wrappato" da un oggetto StreamReader, e devo aggiornare nel form una progress bar, che si riempie mano a mano durante la lettura. Essa risulterà completamente riempita solo alla fine del file, una volta cioé che è stato letto completamente.
Esiste una proprietà o un metodo dello StreamReader che mi consente di "vedere" quanti byte ho letto?
llamanna
Profilo
| Junior Member
70
messaggi | Data Invio:
ven 31 ott 2008 - 16:12
Se ho capito qual è il tuo problema, forse possono esserti di aiuto le proprietà descritte di seguito,
StreamReader reader = new StreamReader(@"C:\text.txt");
int lenght = reader.BaseStream.Length; //restituisce il numero di byte letti.
int position = reader.BaseStream.Position //indica la posizione attuale all'interno dello stream
Buon lavoro.
Laura.
http://lauralamanna.blogspot.com/
RekLats
Profilo
| Newbie
13
messaggi | Data Invio:
sab 1 nov 2008 - 14:57
ciao e grazie per la collaborazione....
In realtà:
int lenght = reader.BaseStream.Length; //restituisce il numero di byte totali del file (la dimensione)
Però dovrebbe aiutarmi la proprietà position, come tu giustamente:
int position = reader.BaseStream.Position //indica la posizione attuale all'interno dello stream
Ora se la inserisco nel ciclo di lettura:
long totalBytes = reader.BaseStream.Length;
long byteReaden;
while (!reader.EndOfStream)
{
reader.ReadLine();
byteReaden = reader.BaseStream.Position;
}
byteReaden non si aggiorna (l'ho verificato a runtime) e resta sempre a 1024.
Qualcuno sa spiegarmi perché?
llamanna
Profilo
| Junior Member
70
messaggi | Data Invio:
sab 1 nov 2008 - 18:45
StreamReader.BaseStream.Position non legge sempre 1024, ma si incrementa di tale valore. Mi spiego meglio. Se la riga letta fa spostare la posizione in un valore inferiore a 1024 byte, position sarà sempre 1024. Se ci troviamo in una posizione tra 1024 e 2048 sarà sempre 2048...e così via.
Un modo per ottenere il risultato che vuoi è il seguente:
StreamReader reader = new StreamReader("text.text");
int currentPosition = 0;
while (!reader.EndOfStream)
{
string value = reader.ReadLine();
currentPosition= currentPosition+ value.Length;
}
Esistono dei modi più sofisticati, come creare un proprio StreamReader e fare l'ovverride del metodo ReadLine, ma credo che la soluzione sopra esposta possa essere un buon compromesso.
Buon lavoro.
Laura.
http://lauralamanna.blogspot.com/
RekLats
Profilo
| Newbie
13
messaggi | Data Invio:
lun 3 nov 2008 - 00:06
E' vero, non mi ero accorto che 1024 è la "risoluzione" minima della proprietà position...
Grazie Laura, sei la mia manna!!!
Complimenti pure per il tuo impegno "extrainformatico" nel tuo blog...
Simone
llamanna
Profilo
| Junior Member
70
messaggi | Data Invio:
mer 5 nov 2008 - 15:38
Grazie per i complimenti! e grazie a te per aver visitato il mio blog!
Torna su
Stanze Forum
Elenco Threads
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 !