| |||
Tamaño Buffer Split Estoy utilizando la funcion strtok para almacenar en un buffer algo hasta que encuentra un delemitador. buffer = strtok ( char * str, const char * delimiters ) el problema es que para volver a escribir el contenido almacenado con la funcion write necesito saber cuanto ocupa pero no se como sacarlo. He googleado y decian varias soluciones como sizeof(buffer) o strlen(buffer), pero ninguna de ellas funciona. Alguien sabe algo? Gracias! |
| |||
Respuesta: Tamaño Buffer Split
Código:
Ademas de no ir con strlen y eso...la segunda parte del archivo no la lee con strtok, me dice que no contiene nada si vuelvo a hacer strtok.El primero si, por que hago la comprovacion poniendo el tamaño del archivo que ya se cual es...y el buffer es correcto pero el siguiente que deberia de ser strtok( NULL,"#") me dice que no contiene nada. //Guardamos las dos fotos en un archivo final, una detras de otra ofstream out; out.open("c:\\a3.jpg",ios::binary); out.write(buffer,length); out.write("#",sizeof("#")); out.write(buffer2,length2); out.write("#",sizeof("#")); out.close(); ifstream in3; in3.open("c:\\a3.jpg",ios::binary); in3.seekg (0, ios::end); length3 = in3.tellg(); in3.seekg (0, ios::beg); buffer3 = new char [length3]; in3.read(buffer3,length3); ptr = strtok ( buffer3 , "#" ); in3.close(); ofstream out2; out2.open("c:\\a33.jpg",ios::binary); out2.write(ptr,strlen(ptr)); out2.close(); Última edición por Apeiron; 22/11/2011 a las 15:02 |
| |||
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 Para recuperar haces:
Código C++:
Ver original |
| |||
Respuesta: Tamaño Buffer Split Entiendo pero este codigo no me compila me genera este error. no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::write(int*, unsigned int)' Solo se puede escribir una cadena de caracteres...pero mas o menos ya entiendo la idea. Escribir en el archivo el tamaño de cada foto y asi "dividirlo" en tamaños |
Etiquetas: |