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 : 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;
}
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 : 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>        ]
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. :\