Bonjour,

Je dois lire un fichier construit en concaténant d'autres fichiers, genre une archive. Certains sont "binaires", genre un fichier png, d'autres "texte", genre un fichier texte. Je connais la position de chaque fichier, et le nombre d'octets qu'il occupe.

J'aimerais pouvoir lire la partie texte du gros fichier, comme si il s'agissait d'un fichier texte indépendant.

Pour cela, je fais un truc comme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
std::stringstream str;
std::ifstream f( "...", std::ios::binary ); /* l'archive */
 
f.seekg( debut_du_texte, std::ios::beg );
 
/*faire des f.read() et str.write() jusqu'à avoir lu tous les octets du texte dans le stringstream*/
Ensuite j'utilise le stringstream comme si c'était un fichier ouvert en mode texte.

Le problème est que, sous windows, je me retrouve avec des '\r' en fin de lignes. Je crois que comme le fichier d'archive est ouvert en binaire, les traitements sur le str; comme std::getline( line, str ), gardent les '\r'.

Pour résumer : ça marche pas, et je capte pas pourquoi. Je m'attendais à ce que le stringstream, un flux en mode texte donc, dégage les '\r'. Mais il ne le fait pas. Peut-être que normalement ce traitement est fait en amont ? genre dans les std::basic_streambuf et que mon code passe à coté ?

Voilà donc. Si vous avez des idées à me donner, je vous serais reconnaissant.

Merci