Musaran Cerveaulté | pour la lecture d'un bloc: Code :
- char buf[N];
- ifstream f(...);
- f.read(buf, N);
|
Pour la taille d'un flux: Code :
- #include <iostream>
- using namespace std;
- //Renvoie la taille des données d'un flux (issu de basic_istream ou basic_ostream), -1 en cas d'échec.
- //Taille binaire si la distinction binaire/texte existe.
- //Notez qu'un flux n'a pas nécessairement de notion de taille ou position.
- //Ne pas confondre avec streamsize (sans _), qui est un typedef STL.
- template <typename E, typename T>
- inline
- basic_istream<E,T>::pos_type
- stream_size(basic_istream<E,T>& bis)
- {
- basic_istream<E,T>::pos_type savepos, lastpos;
- savepos= bis.tellg() ; bis.seekg(0, ios::end) ; //sauvegarder la position et aller en fin
- lastpos= bis.tellg() ; bis.seekg(savepos ) ; //lire la taille et rétablir la position
- return lastpos;
- }
- template <typename E, typename T>
- inline
- basic_ostream<E,T>::pos_type
- stream_size(basic_ostream<E,T>& bos)
- {
- basic_ostream<E,T>::pos_type savepos, lastpos;
- savepos= bos.tellp() ; bos.seekp(0, ios::end) ; //sauvegarder la position et aller en fin
- lastpos= bos.tellp() ; bos.seekp(savepos ) ; //lire la taille et rétablir la position
- return lastpos;
- }
- //L'héritage double étant ambigü, ceci force arbitrairement le mode 'input'
- template <typename E, typename T>
- inline
- basic_iostream<E,T>::pos_type
- stream_size(basic_iostream<E,T>& bios)
- {
- return stream_size(static_cast<basic_istream<E,T>&>(bios));
- }
|
Exemple d'utilisation: Code :
- ifstream ifs("foo.txt" );
- long taillefoo= stream_size(ifs);
|
Message édité par Musaran le 22-03-2003 à 07:50:23 ---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
|