[SOLUCIONADO] Problema al intentar concatenar ficheros binarios.

Iniciado por SARGE553413, 10 Julio 2014, 01:44 AM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

ftp://Hola a todos.

Estoy intentando concatenar unos ficheros bmp en uno solo (sin cabeceras).
Lo que hago es:
- Leo todos los bytes de uno (a memoria, quitando la cabecera)
- Los escribo en el fichero destino.
- Paso al siguiente.

Bien, el problema es que al terminar de escribir un fichero, antes de pasar al siguiente , aparecen unos cuantos bytes extra (ýýýý concretamente).
Es decir, supongamos que A, B y C son los bytes de 3 ficheros, al final en lugar de quedar en el fichero destino ABC queda AýýýýBýýýýCýýýý.

He comprobado que el problema no es al leer los ficheros, porque he probado a leer solo 1 y volver a escribirlo, y escribe todos los bytes y al final el  ýýýý.

¿Qué puedo hacer?

Adjunto el código que uso PARA ESCRIBIR, (la función LoadBMP lee todos los bytes del fichero bmp sin cabeceras):

int RAWCreator::toRawFile(char *bmps[],int numBmps,const char *dstFile){
fstream aux(dstFile);
ofstream dst;

if(aux.good()){
aux.close();
return RAWCreator::ALREADY_EXIST;
}

dst.open(dstFile, ios::app);
for(int i=0;i<numBmps;i++){
dst<<LoadBMP(bmps[i],this->bih);
}
dst.close();
return SUCCESS;
}


SARGE553413

#1
Hola de nuevo, he encontrado una solución, aunque creo que no es la mejor, agradeceré si alguien me dice como hacerlo de otra manera:


int RAWCreator::toRawFile(char *bmps[],int numBmps,const char *dstFile){
fstream aux(dstFile);
ofstream dst;

if(aux.good()){
aux.close();
return RAWCreator::ALREADY_EXIST;
}

dst.open(dstFile, ios::app);
for(int i=0;i<numBmps;i++){
unsigned char *aux=LoadBMP(bmps[i],this->bih);  //<====AQUÍ
dst.write((char *)aux,this->bih->imgsize);             //<====AQUÍ
}

dst.close();
return SUCCESS;
}


Ahora no tengo claro si ese castin de unsigned char a char no dará problemas, tal como lo veo ¿habrá algunos bytes que cambiarán no?
Gracias.