pubsetbuf, comment ça marche?
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 :
Code:
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;
} |
game_binarie.GetFile() renvois un char *, GetFileSize() renvois un long.
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 :
Code:
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> ] |
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. :\