Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/11/2011, 15:25
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Tamaño Buffer Split

El problema es que estas trabajando con archivos binarios.....seguramente dentro del jpg1 hay un byte en cero que hace las funciones de string de c crean que llegaste a un final de cadena.

Las funciones de string sirven cuando trabajas con string. Detectan un cero como fin de cadena. Es mas un archivo de texto siempre termina con un caracter especial que marca el fin del archivo (EOF)[no recuendo su numero]. En cambio si abrimos ese archivo como binario poco le va a importar ese caracter especial.

En modo binario se guian por el tamañan del archivo, adentro puede haber cualquier cosas y lo que es mas importante puede ser interpretada de cualquier manera. El modo texto plano de un archivo es una de esas forma de interpretar.

Asi que si usas strtok si o si debes trabajar con cadenas de caracteres (los caracteres ascii imprimibles).

Ahora resolviendo tu duda, en vez de pegar un # en la imagen (que si tratas de abrirla con el bloc de notas es casi seguro que ni lo ves ese #) deberias guardar la longitud del archivo.

Código C++:
Ver original
  1. ofstream out;
  2.       out.open("c:\\a3.jpg",ios::binary);
  3.       out.write(&length,sizeof(int));
  4.       out.write(buffer,length);
  5.       out.write(&length2,sizeof(int));
  6.       out.write(buffer2,length2);
  7.       out.close();

Para recuperar haces:

Código C++:
Ver original
  1. ifstream in3;
  2.       in3.open("c:\\a3.jpg",ios::binary);
  3.       in3.read(&length,sizeof(int));
  4.       buffer = new char[length];
  5.       in3.read(buffer,length);
  6.       in3.read(&length2,sizeof(int));
  7.       buffer2 = new char[length2];
  8.       in3.read(buffer2,length2);
  9.       in3.close();