Problema con Stat() en C

Iniciado por Borluck, 7 Mayo 2013, 13:17 PM

0 Miembros y 1 Visitante están viendo este tema.

Borluck

Hola!

Me gustaría poner una condición que me diga si existe un archivo txt o no, previamente creado y además no uso rutas ni directorios, simplemente lo creo donde el ejecutable. El nombre del archivo se guarda en una variable char y con un strcat le añado .txt. Uso windows 7 y code::blocks y además el programa esta hecho en C. Agradecería que me ayudasen con esta cuestión por favor.

Gracias por adelantado

leosansan

#1
Cita de: Borluck en  7 Mayo 2013, 13:17 PM
Me gustaría poner una condición que me diga si existe un archivo txt o no, previamente creado y además no uso rutas ni directorios, simplemente lo creo donde el ejecutable. El nombre del archivo se guarda en una variable char y con un strcat le añado .txt.

Creo que te refieres a algo como esto:

Código (cpp) [Seleccionar]

fichero = fopen(NOM_ARCHIVO, "rt");
   if (fichero == NULL)
       {
           printf("No existe el fichero!\n");
           return 1;
       }


O bien a su forma más "refinada", con el uso de la librería stdlib:

Código (cpp) [Seleccionar]

if ((entrada = fopen(NOM_ARCHIVO, "r")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }


En ambos casos has de tener en cuenta que NOM_ARCHIVO ha de ir entre comillas.

Saluditos!. ...  

Borluck

Y en vez de poner el nombre del archivo entre comillado, no podría poner una variable en la que tenga guardada la string de carácteres?

ejemplo:
char ristra[] = "fichero.txt";

ahora usaría la variable ristra donde dices de poner el nombre del fichero, pero funcionaría? o quizás hay alguna manera?

leosansan

Cita de: Borluck en  7 Mayo 2013, 16:42 PM
Y en vez de poner el nombre del archivo entre comillado, no podría poner una variable en la que tenga guardada la string de carácteres?

ejemplo:
char ristra[] = "fichero.txt";

ahora usaría la variable ristra donde dices de poner el nombre del fichero, pero funcionaría? o quizás hay alguna manera?

Estando entrecomillado el nombre del fichero va O.K.

Saluditos!. ... 

Borluck

perdona por insistir tanto pero lo que yo pongo no es el nombre del fichero, lo que quiero poner es una variable char en la cual tengo guardado el nombre del fichero...  :(.

He probado pero no funciona...hay alguna otra manera o quizás lo pongo mal...

leosansan

Cita de: Borluck en  7 Mayo 2013, 17:06 PM
perdona por insistir tanto pero lo que yo pongo no es el nombre del fichero, lo que quiero poner es una variable char en la cual tengo guardado el nombre del fichero...  :(.

He probado pero no funciona...hay alguna otra manera o quizás lo pongo mal...

Tal como lo tienes en lugar de NOM_ARCHIVO puedes poner ristra y debe funcionar bien, si no el error estará en otro lado.

¿Por qué no cuelgas parte del código para analizarlo?.

Te pongo un ejemplo con ese uso de la variable como nombre del fichero que funciona sin problemas:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#define NUM_ELEM  3
int main ( )
{
        char NOM_ARCHIVO[]="ecuaciones.txt";
        int i=0;
        FILE *entrada;
        float a[NUM_ELEM],b[NUM_ELEM],c[NUM_ELEM],A,B,C;
        if ((entrada = fopen(NOM_ARCHIVO, "w")) == NULL){
      perror(NOM_ARCHIVO);
      return EXIT_FAILURE;
   }
        fprintf(entrada, "5x+2y=1\n");
        fprintf(entrada, "5x+3y=1\n");
        fprintf(entrada, "3x+8y=2");
        fclose ( entrada );
        if ((entrada = fopen(NOM_ARCHIVO, "r")) == NULL){
      perror(NOM_ARCHIVO);
      return EXIT_FAILURE;
   }
        while (fscanf (entrada, "%gx+%gy=%g", &A, &B, &C)==NUM_ELEM)
        {
            printf ("a= %g,b=%g,c=%g\n",A,B,C);
            a[i]=A;
b[i]=B;
c[i]=C;
printf ("a[%d]= %g,b[%d]=%g,c[%d]=%g\n",i,a[i],i,b[i],i,c[i]);
i++;
        }
    fclose(entrada);
    return 0;
}


Saluditos .. otra vez! ....