Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: RicGeo en 16 Junio 2014, 23:05 pm



Título: Como obviar archivo leido si no existe en C linux
Publicado por: RicGeo en 16 Junio 2014, 23:05 pm
Hola amigos del ElHacker quisiera que me ayuden con un problema que tengo a la hora de compilar este pequeño programa en C.
Este pequeño programa guarda los numeros que se encuentran dentro de ciertos archivos, hasta ahi todo bien.. el problema empieza cuando quiero condicionar el programa para cuando no exita el archivo del cual quiero tomar sus numeros ... mando a compliar pero en el terminal aparece "Abortado (`core' generado)" y otros codigos sin sentido alguno.
Que me faltaría agregar para que el programa siga ejecutandose cuando no encuentre un archivo?
Código
  1. #include<stdio.h>
  2. int main(){
  3. int i,j,k;
  4. double coord1[31][3],coord2[31][3],coord3[31][3];
  5.   FILE *erp1,*erp2,*erp3;
  6. ///////////////////////////////////////////////////
  7.        erp1=fopen("/home/PROGAMACION/prueba_gg/am01","r");
  8.         if (!erp1)
  9.           //Que puedo poner aca?//
  10.         else{
  11.            erp1=fopen("/home/PROGAMACION/prueba_gg/am01","r");  
  12.            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
  13.                fscanf(erp1,"%lf\n",&coord1[i][0]);
  14.                fscanf(erp1,"%lf\n",&coord1[j][1]);
  15.                fscanf(erp1,"%lf\n",&coord1[k][2]);
  16.                printf("%lf - %lf - %lf\n",coord1[i][0],coord1[j][1],coord1[k][2]);
  17.                }
  18.             }
  19.        fclose(erp1);
  20. //////////////////////////////////////////////////
  21.       printf("###########################\n");
  22.        erp2=fopen("/home/PROGAMACION/prueba_gg/am02","r");
  23.         if (!erp2)
  24.           //Que puedo poner aca?//
  25.         else{  
  26.            erp2=fopen("/home/PROGAMACION/prueba_gg/am02","r");
  27.            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
  28.                fscanf(erp2,"%lf\n",&coord2[i][0]);
  29.                fscanf(erp2,"%lf\n",&coord2[j][1]);
  30.                fscanf(erp2,"%lf\n",&coord2[k][2]);
  31.                printf("%lf - %lf - %lf\n",coord2[i][0],coord2[j][1],coord2[k][2]);
  32.                }
  33.             }
  34.        fclose(erp2);
  35. //////////////////////////////////////////////////
  36.       printf("###########################\n");
  37.        erp3=fopen("/home/PROGAMACION/prueba_gg/an02","r");
  38.         if (!erp3)
  39.           //Que puedo poner aca?//
  40.         else{  
  41.            erp3=fopen("/home/PROGAMACION/prueba_gg/an2","r");
  42.            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
  43.                fscanf(erp3,"%lf\n",&coord3[i][0]);
  44.                fscanf(erp3,"%lf\n",&coord3[j][1]);
  45.                fscanf(erp3,"%lf\n",&coord3[k][2]);
  46.                printf("%lf - %lf - %lf\n",coord3[i][0],coord3[j][1],coord3[k][2]);
  47.                }
  48.             }
  49.        fclose(erp2);
  50. return 0;
  51. }
Agradezco su atencion!!


Título: Re: Como obviar archivo leido si no existe en C linux
Publicado por: xiruko en 17 Junio 2014, 00:00 am
Qué debe hacer el programa cuando no encuentra algún archivo?

Así sin saberlo, yo solamente mandaría un mensaje de error por el stderr:

Código
  1. fprintf(stderr, "ERROR: No se encontro el archivo %s\n", archivo);

Por cierto, el fclose() deberías ponerlo dentro de cada else en lugar de fuera, ya que sino, en el caso de que no encuentre el archivo, el puntero que le pasas no es un puntero válido y puede generar problemas tal y como te está pasando a ti.

Saludos.