Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Obtener el chunk de datos de un fichero.

Estas en el tema de Obtener el chunk de datos de un fichero. en el foro de C/C++ en Foros del Web. Hola me gustaria obtener el chunk de datos de una imagen, que supongo que sera lo mismo que para cualquier tipo de archivo. Por lo ...
  #1 (permalink)  
Antiguo 14/12/2006, 04:26
Avatar de Escalona  
Fecha de Ingreso: mayo-2005
Mensajes: 70
Antigüedad: 19 años
Puntos: 0
Obtener el chunk de datos de un fichero.

Hola me gustaria obtener el chunk de datos de una imagen, que supongo que sera lo mismo que para cualquier tipo de archivo.
Por lo que he visto por ahi tengo ke abrir el archivo en modo binario e ir guardandolo en alguna variable. A ver si podeis guiarme , gracias.
  #2 (permalink)  
Antiguo 14/12/2006, 07:40
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Obtener el chunk de datos de un fichero.

¿Exactamente cuál es el problema?

Simplemente usa fopen() y demás para C, std::ifstream si usas C++.
  #3 (permalink)  
Antiguo 14/12/2006, 08:26
Avatar de Escalona  
Fecha de Ingreso: mayo-2005
Mensajes: 70
Antigüedad: 19 años
Puntos: 0
Re: Obtener el chunk de datos de un fichero.

Estoy intentandolo de la siguiente manera pero no me deja me lanza error.

Código:
ifstream ifs;
ifs.open("c:\\bt.jpg",ios::binary);
char* buffer;
int size;

//obtengo el tamaño del fichero
ifs.seekg(0, ios::end);
size = ifs.tellg();
ifs.seekg(0, ios::beg);


//lo asigno a una variable para guardar el chunk
char* img;  
ifs.getline(img, size);
Así me dice "Run-Time Check Failure #3 - The variable 'img' is being used without being defined."

Si le pongo un tamaño fijo a img por ejemplo asi:

Código:
ifstream ifs;
ifs.open("c:\\bt.gif",ios::binary);
char* buffer;
int size;

//obtengo el tamaño del fichero
ifs.seekg(0, ios::end);
size = ifs.tellg();
ifs.seekg(0, ios::beg);


//lo asigno a una variable para guardar el chunk
char img[1105];  
ifs.getline(img, size); //donde size vale 1105
No me lanza el error, pero no me guarda bien el chunk de datos de la imagen, lo ke me guarda en la variable no corresponde a la imagen, ademas no me interesa asi ya que la imagen no tendra un tamaño fijo.
  #4 (permalink)  
Antiguo 14/12/2006, 11:38
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Obtener el chunk de datos de un fichero.

Cita:
Iniciado por Escalona Ver Mensaje
Así me dice "Run-Time Check Failure #3 - The variable 'img' is being used without being defined."
¿Y te crees que te lo dice por nada?

Haz caso al debugger/compilador/lo que sea y lee el mensaje que el error te lo está avisando a gritos:

Fallo en la comprobación en tiempo de ejecución - La variable 'img' está siendo usada sin ser definida.

¿Cómo quieres usar algo que no existe?
  #5 (permalink)  
Antiguo 14/12/2006, 14:56
Avatar de Escalona  
Fecha de Ingreso: mayo-2005
Mensajes: 70
Antigüedad: 19 años
Puntos: 0
Re: Obtener el chunk de datos de un fichero.

Código:
//lo asigno a una variable para guardar el chunk
char* img;  
ifs.getline(img, size);
El error me dice que la variable no esta definida, pero si la estoy declarando en la linea superior,¿como no esta definida?
  #6 (permalink)  
Antiguo 14/12/2006, 17:19
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Obtener el chunk de datos de un fichero.

Si no existiese no hubieras podido compilar el programa.

No es eso: el compilador te está diciendo que no tiene ningún valor cuando la usas.
  #7 (permalink)  
Antiguo 15/12/2006, 02:33
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Re: Obtener el chunk de datos de un fichero.

[/code]
//lo asigno a una variable para guardar el chunk
char *img;
ifs.getline(img, size); //donde size vale 1105
[/code]


el problema es que antes de usar un puntero, (img), tiene que apuntar a una zona de momoria valida.
Esto lo haces reservando memoria con malloc, o en su caso usando un array el cual tiene el incoveniente de ser estatico en su tamaño.
  #8 (permalink)  
Antiguo 15/12/2006, 04:07
Avatar de Escalona  
Fecha de Ingreso: mayo-2005
Mensajes: 70
Antigüedad: 19 años
Puntos: 0
Re: Obtener el chunk de datos de un fichero.

Bien, muchas gracias por las aclaraciones, ahora ya se que necesito usar malloc para poder usar la variable img, bien hasta ahi me funciona todo, ahora estoy recorriendo el fichero *.jpg abierto en modo binario para guardar su contenido en una variable de la siguiente forma:

Código:
 ifs.open("c:\\bt.jpg",ios::out | ios::binary);

 ifs.seekg(0, ios::end);
 size = ifs.tellg();
 ifs.seekg(0, ios::beg);
 
char* img = (char*)malloc(size);
 com=0;
	 do {
		ifs.read(buffer, 2048);
		bytesLeidos = ifs.gcount();
		if (com==0){
			strcpy(img,buffer);
		}else{
			strcat(img,buffer);
		}
		com++;
	  } while(bytesLeidos > 0);
Parecía que funcionaba bien, el problema es que llegados a un punto ( cuando el bucle da 3 o 4 vueltas, la variable img inexplicablemente se me vacía, y ya no sigue concatenando al estar vacía. ¿Alguien sabe a que puede deberse?

Última edición por Escalona; 15/12/2006 a las 04:51
  #9 (permalink)  
Antiguo 15/12/2006, 07:18
Avatar de Escalona  
Fecha de Ingreso: mayo-2005
Mensajes: 70
Antigüedad: 19 años
Puntos: 0
Re: Obtener el chunk de datos de un fichero.

Solucionado

Gracias por todas vuestras respuestas pongo el codigo para que veais como al final lo he conseguido, primero el metodo getline no me servia (devuelve una cadena hasta que ve un retorno de linea de manera que no me daba el binario completo) he usado fread, y segundo no hacia bien el malloc, no alocaba la memoria total que necesitaba, bueno asi lo he hecho y me ha funcionado correctamente:

Código:
char * m=(char*)malloc(size*sizeof(char));   
if (m==NULL) return 3;  //error

fread(m,sizeof(char),size,f); //vuelca el fich a memoria.
Al final mucho más sencillo que todo lo que estaba haciendo como me temia.
Gracias a todos.
  #10 (permalink)  
Antiguo 15/12/2006, 07:41
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Obtener el chunk de datos de un fichero.

Cita:
Iniciado por Nivel7 Ver Mensaje
el problema es que antes de usar un puntero, (img), tiene que apuntar a una zona de momoria valida.
Esto lo haces reservando memoria con malloc, o en su caso usando un array el cual tiene el incoveniente de ser estatico en su tamaño.
No... Está usando C++. Debería utilizar el operador new (sí, ya sé que da igual para eso, pero está aprendiendo C++, y ésa es la manera de hacerlo propia del lenguaje).
  #11 (permalink)  
Antiguo 15/12/2006, 07:43
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Obtener el chunk de datos de un fichero.

Cita:
Iniciado por Escalona Ver Mensaje
Solucionado

Gracias por todas vuestras respuestas pongo el codigo para que veais como al final lo he conseguido, primero el metodo getline no me servia (devuelve una cadena hasta que ve un retorno de linea de manera que no me daba el binario completo) he usado fread, y segundo no hacia bien el malloc, no alocaba la memoria total que necesitaba
Incorrecto, si la estabas consiguiendo. sizeof(char) siempre es igual a 1 en C, independientemente de la arquitectura.

Tampoco hace falta usar (char *) para convertirlo.

En cualquier caso, utiliza new y delete:

img = new char[size];

delete [] size;
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:56.