PDA

Visualizza la versione completa : [c++]istream , fstream e modifiche


giuseppe500
06-08-2013, 20:36
ciao.
Devo sostituire le prime 220 righe di un file xml di svariate centinaia di MB.
è possibile leggere solo le prime righe e sostituire solo quelle senza leggere tutto il file?
Il problema è che poi devo passare ad una libreria l'url del file modificato salvato o un istream.
C'è qualche metodo con gli stream per fare questo?

grazie.

MItaly
07-08-2013, 12:20
Gli stream e i file in generale sono byte-oriented, non line-oriented, per cui non esiste un modo semplice per fare quello che chiedi in maniera efficiente; questo vale in generale per i i formati testuali, che non sono assolutamente adatti per manipolare grandi quantità di dati in maniera efficiente.

MItaly
08-08-2013, 16:51
In realtà, ripensandoci, se il codice a cui devi passare i dati accetta un istream&, dovrebbe essere possibile, ma non è semplicissimo. Quello che bisognerebbe fare sarebbe una classe derivata da std::streambuf che si occupi di "simulare" il file con le prime linee sostituite (ovvero, se gli vengono richiesti i primi X caratteri li pesca dal testo sostituito, oltre li pesca dal file).
Per avere un'idea di come funzionano gli streambuf & co. puoi leggere
http://stackoverflow.com/questions/8116541/what-exactly-is-streambuf-how-do-i-use-it
http://en.cppreference.com/w/cpp/io/basic_streambuf
http://www.mr-edd.co.uk/blog/beginners_guide_streambuf
http://artofcode.wordpress.com/2010/12/12/deriving-from-stdstreambuf/

giuseppe500
08-08-2013, 20:35
grazie Mitaly

MItaly
09-08-2013, 18:11
:ciauz:

Loading