elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Problema al intentar concatenar ficheros binarios.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Problema al intentar concatenar ficheros binarios.  (Leído 2,244 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
[SOLUCIONADO] Problema al intentar concatenar ficheros binarios.
« en: 10 Julio 2014, 01:44 am »

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):
Código:
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;
}


« Última modificación: 10 Julio 2014, 12:40 pm por SARGE553413 » En línea

SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Problema al intentar concatenar ficheros binarios.
« Respuesta #1 en: 10 Julio 2014, 02:02 am »

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:

Código:
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.


« Última modificación: 10 Julio 2014, 12:33 pm por SARGE553413 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines