Voy ahora un poco justo de tiempo para ponerme a mirar qué falla, pero así a primera vista, me da que tu problema está en el uso de itoa:
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/Lo miraré luego si tengo un rato, mientras, te dejo una alternativa que uso yo en uno de mis programillas:
char fnom[40];
std::ofstream fichero;
for(int i=0;i<nimg;i++){
sprintf(fnom,"histogrames/%d.dat",i);
fichero.open(fnom);
do_something();
fichero.close();
}
este código abre/crea ficheros en la carpeta histogrames con nombre 0.dat, 1.dat etc etc etc.
Para tu caso, te podría servir usar algo así pero primero obteniendo la parte sin números del nombre del fichero, para luego juntarlas usando sprintf.