Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2012, 15:41
Darkmen
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 12 años, 1 mes
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