Hoy, \o
Petit problème de buffer et de fstream.
J'ai besoin d'écrire une fonction qui renvois un std::ifstream. Je veux générer mon ifstream à partir d'un bloc de donnée en mémoire. Pour identifier ce bloc, j'ai donc un char* pour le début de mes données et un long pour la taille.
J'ai cherché des exemples sur le net, j'ai trouvé un petit bout de code et je l'ai convertit à mon avantage :
game_binarie.GetFile() renvois un char *, GetFileSize() renvois un long.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 std::ifstream Game::GetBinaries(std::string &name) { std::ifstream file; file.rdbuf()->pubsetbuf(game_binaries.GetFile(name), game_binaries.GetFileSize(name)); return file; }
De ce que j'ai lut, le pubsetbuf est une méthode public de basic_streambuf pour assigner un buffer perso à notre objet ifstream, hors, j'obiens une jolie erreur :
What is wrong? rdbuf() permet bien d'acceder au buf, vu qu'il renvoit un pointeur, et j'utilise pubsetbuf pour changer le buffer de mon stream. :\
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 1>d:\Microsoft Visual Studio 9.0\VC\include\fstream(676) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ] 1> d:\Microsoft Visual Studio 9.0\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ] 1> This diagnostic occurred in the compiler generated function 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ]
Partager