2010-07-07 2 views

Répondre

4

boost::iostreams::basic_array_sink modèles un SinkDevice seulement, ce qui vous donne écriture seule sémantique et aucun moyen de dire combien d'octets ont été écrits.

Otoh, ses frères et soeurs boost::iostreams::basic_array modèles un SeekableDevice permettant d'utiliser la recherche() fonction membre de votre flux:

namespace io = boost::iostreams; 

char buffer[4096]; 
io::stream<io::basic_array<char> > source(buffer, buffer_size); 

boost::archive::binary_oarchive oa(source); 
oa << serializable_object; 

// move current stream position to the end, io::seek() returns new position 
std::cout << "Bytes written: " 
      << io::seek(source, 0, std::ios_base::end) 
      << std::endl; 
+0

merci, a parfaitement fonctionné! – scooterman

4

assez intéressant, je viens d'essayer la solution hkaiser proposée et au lieu d'obtenir le nombre d'octets écrit , J'ai eu le nombre d'octets dans le tableau initial (c.-à-d. La recherche à la fin est allée jusqu'à la fin de la mémoire tampon).

je devais modifier légèrement cet appel à être:

(int)boost::iostreams::seek(s, 0, std::ios_base::cur) 

Peut-être qu'ils ont changé quelque chose dans la bibliothèque boost qui a fait se comporter différemment. Je pense que nous utilisons le dernier et le plus grand du 20 janvier 2011.

+0

a rencontré le même problème. –

Questions connexes