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

Problema Con estructuras y ficheros

Estas en el tema de Problema Con estructuras y ficheros en el foro de C/C++ en Foros del Web. Señores como andan? Antes que nada me presento, soy nuevo en el foro. Me llamo Pablo y estoy cursando ingenieria electronica en la universidad nacional ...
  #1 (permalink)  
Antiguo 11/11/2012, 15:41
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Problema Con estructuras y ficheros

Señores como andan? Antes que nada me presento, soy nuevo en el foro. Me llamo Pablo y estoy cursando ingenieria electronica en la universidad nacional de mi pais. Tengo un problema con la lectura del archivo en el siguiente codigo y nose que hacer:
(el programa guarda dos estructuras en un archivo, luego las levanta del archivo con fread y las mete en una lista):

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <fcntl.h>
  7.  
  8. typedef struct tren{
  9.  
  10.   int atraso;
  11.   char x_retiro[6];
  12.   char x_cordoba[6];
  13.   char x_smartin[6];
  14.   char x_spenia[6];
  15.   char x_caseros[6];
  16.   char x_hurlingham[6];
  17.   char x_paz[6];
  18. }TREN;
  19.  
  20.  
  21. typedef struct nodo{
  22.  
  23.       TREN var;
  24.       struct nodo *next;
  25.   }NODO;
  26.  
  27.  
  28. int main(int argc, char * argv[])
  29. {
  30.  
  31.  //int numbytes;/*Contendr� el n�mero de bytes recibidos por read () */
  32.  TREN *var;
  33.  
  34.  int cont=0;
  35.  int cant_byte = 0;
  36.  FILE* fd = NULL;
  37.  fd = fopen("probando3.txt","ra+b");
  38.  
  39.  
  40.  while(cont < 2){
  41.  
  42.    cont++;
  43.    var = (TREN *)malloc(sizeof(TREN));
  44.    
  45.  printf("Ingrese cantidad de minutos de atraso \n");
  46.  scanf("%d",& ( (var)->atraso ) );
  47.  
  48.  printf("ingrese horario de salida por itinerario\n");
  49.  gets( (var)->x_retiro);
  50.  gets( (var)->x_retiro);
  51.  
  52.  printf("Ingrese horario de de pasada por ' Garita Cordoba ' separado por ' : ' \n");
  53.  gets( (var)->x_cordoba);
  54.  
  55.  printf("Ingrese horario de de pasada por ' Garita San Martin ' separado por ' : '\n");
  56.  gets( (var)->x_smartin);
  57.  
  58.  printf("Ingrese horario de de pasada por ' Garita Saenz Peña ' separado por ' : '\n");
  59.  gets( (var)->x_spenia);
  60.  
  61.  printf("Ingrese horario de de pasada por ' Garita Caseros ' separado por ' : ' \n");
  62.  gets( (var)->x_caseros);
  63.  
  64.  printf("Ingrese horario de de pasada por ' Garita Hurlingham ' separado por ' : ' \n");
  65.  gets( (var)->x_hurlingham);
  66.  
  67.  printf("Ingrese horario de de pasada por ' Garita Paz ' separado por ' : ' \n");
  68.  gets( (var)->x_paz);
  69.  
  70. if(  ( fwrite(var,sizeof(TREN),1,fd) ) == -1 ) {
  71.   printf("Error en la escritura del archivo");
  72.   exit(0);
  73.     }
  74.  var = NULL;
  75.  free(var);
  76.  }
  77.  
  78.  while ( !feof(fd) ){
  79.    
  80.    NODO *H= NULL;
  81.    NODO *aux;
  82.    NODO *primer;
  83.    
  84.    if(H == NULL){
  85.    
  86.    aux = (NODO *)malloc(sizeof(NODO));
  87.    primer = aux;
  88.    if ( ( fread( &((aux)->var) ,sizeof(TREN), 1 , fd ) )  == 0){
  89.      printf("Error en la lectura del archivo");
  90.      exit(0);
  91.    }
  92.    
  93.  
  94.    
  95.    H = aux;
  96.    }
  97.    else{
  98.      
  99.     aux = (NODO *)malloc(sizeof(NODO));
  100.     fread( &((aux)->var) ,sizeof(TREN), 1 , fd );
  101.     H->next = aux;
  102.     H = aux;
  103.     H->next = NULL;
  104.    
  105.   }
  106.  
  107.  }
  108.    
  109.    fclose(fd);
  110.    
  111.    
  112.    return 0;
  113.  
  114. }


El error que recibo es el que esta ahi, fread devuelve 0 y no lee nada del archivo. El archivo lo escribe perfectamente. Estoy bajo linux y al archivo probando3.txt le di todos los permisos. Alguna idea? Saludos

Última edición por Darkmen; 11/11/2012 a las 15:44 Razón: Me olvide de poner los highlight
  #2 (permalink)  
Antiguo 11/11/2012, 18:55
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Problema Con estructuras y ficheros

No he visto ficheros aún y mucho menos con punteros, pero lo más probable es que el error esté en que cuando escribes con el fwrite, el "|" ese de escritura queda en la posición final. Y para poder leerlo deberías colocarlo en la posición inicial del .txt
Creo que había una función para eso, pero lo otro podría cerrar el archivo con fclose antes del fread
y luego abrirlo nuevamente con otro fopen para que el "|" o la posición ya para escritura/lectura esté al inicio.

Espero eso sea. Saludos

Última edición por cotolon; 11/11/2012 a las 19:04
  #3 (permalink)  
Antiguo 12/11/2012, 13:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema Con estructuras y ficheros

Se agradece la ayuda!, el problema es el socket.... llega mal el struct. Nose por que aun. Estoy averiguando eso.
  #4 (permalink)  
Antiguo 13/11/2012, 02:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: Problema Con estructuras y ficheros

Hola Darkmen,

¿has probado a depurar tu programa para intentar averiguar lo que pasa? Yo no lo he hecho pero, viendo el código, diría que cuando terminas la escritura, el descriptor de fichero fd continua apuntando a la siguiente posición del fichero, es decir, a continuación del último caracter escrito, en lugar de al principio, por eso fread() te dice que no lee nada.

Un saludo,
gonzo

Etiquetas: estructuras, ficheros, int, programa, string
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 16:47.