3 messaggi dal 27 giugno 2011
Salve Amici
Avrei un piccolo problema spero mi possiate aiutare
Ho scritto un parser xml usando XmlReader, ora vorrei implementare una progressBar dipendente dalla dimensione del file ma non riesco a capire come(stranamente!!!! *.*').
Ho pensato di prendere la dimensione del file e relazionarla con la posizione letta con xmlReader.Read() ma non va bene..
Avete qualche idea
Vi ringrazio in anticipo per le vostre risposte!!!
11.886 messaggi dal 09 febbraio 2002
Contributi
Salve a te, benvenuto!

divanemix ha scritto
Ho pensato di prendere la dimensione del file e relazionarla con la posizione letta con xmlReader.Read() ma non va bene..

sì, infatti la classe XmlReader non espone alcuna proprietà pubblica che ti permetta di conoscere "il punto" del file in cui ci si trova dopo un .Read().

Poco male perché puoi costruire un'istanza di XmlReader usando il suo metodo Create che accetta uno Stream creato da te. A quel punto è facile conoscere la posizione del cursore nel file perché lo Stream ha una proprietà .Location.

string filename = "tuofile.xml";
//qui creo lo stream in sola lettura
using (System.IO.FileStream stream = System.IO.File.OpenRead(filename))
{
    //lo passo al factory method .Create
    XmlReader reader = XmlReader.Create(stream);
    //leggo il file xml
    while (reader.Read())
    {
        //mi calcolo la percentuale usando le proprietà Position e Length dello stream
        var percentualeCompletamento = stream.Position * 100 / stream.Length;
    }
}


Attenzione perché la percentuale sarà approssimativa, specie con file piccoli. XmlReader leggerà lo stream in frammenti (chunks) da 4Kb prima di poter effettuare un .Read(). Questo significa che se il file xml pesa meno di 4kb, al primo .Read() già ti troverai una percentuale di completamento del 100%.

Se invece i tuoi xml pesano svariate centinaia di Kilobyes (o qualche megabyte) allora credo che l'approssimazione sarà più che accettabile.

ciao.

Enjoy learning and just keep making
3 messaggi dal 27 giugno 2011
Ciao grazie mille per la tua risposta..
ero quasi ma quasi arrivata..

Ottimo esempio Funziona tutto Bene
Grazie ancora alla prossima!!!! ;)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.