Abrir un archivo en Eclipse

Escribí algo en C que necesita abrir un file.txt y gestionar algunos datos. Acabo de empezar a usar Eclipse (después de Code::blocks y Netbeans) pero no puedo encontrar la ruta correcta para poner mi archivo para permitir que Eclipse lo lea... ¿alguna sugerencia?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define COD 10
#define DIP 1000
#define SIZE 5

int main (int argc, char *argv[])
{
    int ora, minuti, i = 0, j = 0, min_lav;
    int num_dip = 0, trovato, dip_lav = 0;
    int vett_or[SIZE][SIZE];
    char cod_dip[COD+1], vett_dip[DIP][COD+1];


    FILE *fp;

    /* Apertura del file */
    fp = fopen (argv[1], "r");

    /* Verifica della corretta apertura del file */
    if (fp == NULL)
    {
        printf ("Errore nell'apertura del file %s\n", argv[1]);
        exit(EXIT_FAILURE);
    }

    /* Primo caso */
    if (argc == 2)
    {
        /* Lettura dele righe e copia degli elementi in un vettore */
        while (fscanf (fp, "%d %d %s\n", &ora, &minuti, cod_dip) == 3)
        {
            strcpy(vett_dip[num_dip], cod_dip);
            num_dip++;
        }

        /* Stampa dei dipendenti */
        for (i = 0; i < num_dip; i++)
            printf ("Dipendente %d: %s\n", i+1, vett_dip[i]);

        /* Ricerca elementi diversi */
        for (i = 0; i < num_dip; i++)
        {
            trovato = 0;

            for (j = 0; j < i && trovato == 0; j++)
            {
                if (strcmp(vett_dip[i], vett_dip[j]) == 0)
                    trovato = 1;
            }

            if (trovato == 0)
                dip_lav++;
        }

        printf ("\n===================================\n");
        printf ("Ci sono stati %d dipendenti a lavoro", dip_lav);
        printf ("\n===================================\n");

    }

    /* Secondo caso*/
    if (argc == 3)
    {
        while (fscanf (fp, "%d %d %s\n", &ora, &minuti, cod_dip) == 3)
        {
            if (strcmp(argv[2], cod_dip) == 0) {
                vett_or[i][0] = ora;
                vett_or[i][1] = minuti;
                i++;
            }


        }

        /* Stampa del dipendente */
        if (i == 1)
            printf ("Per il dipendete selezionato è stato registrato un solo passaggio\n");

        printf ("Dipendente %s:\n", argv[2]);
        printf ("Primo passaggio: %d  %d\n",vett_or[0][0], vett_or[0][1]);
        printf ("Ultimo passaggio: %d  %d\n", vett_or[i-1][0], vett_or[i-1][1]);

        min_lav = ((vett_or[i-1][0]*60)+vett_or[i-1][1]) - ((vett_or[0][0]*60)+(vett_or[0][1]));

        printf ("Il dipendente selezionato ha lavorato per %d minuti\n\n",min_lav );

    }

    return 0;
}

preguntado el 12 de junio de 12 a las 15:06

¿Está impreso correctamente el nombre del archivo en su mensaje de error (dentro del fp == NULL cláusula)? -

"¿Cuál es la 'mejor opción' (en su opinión) para un IDE C/C++ bajo Unix?" -- innumerables preguntas como esta se han hecho aquí, y cerradas por ser subjetivas y llevar a una evangelización sin fin. Sin embargo, my la sugerencia es no use un IDE al principio, pero usando un compilador de línea de comandos y un editor de texto simple, porque quiere aprender C, no Eclipse/NetBeans/MSVC/.... -

@simon el nombre está impreso correctamente sí... -

@DevSolar soy un novato en la programación... ¿es posible depurar en la línea de comandos? -

@user1409641: Absolutamente. BGF es un depurador excelente y potente, y si lo inicia con gdb -tui, incluso le brinda una buena vista de su código fuente mientras establece puntos de interrupción y recorre su código. Si bien puede que no vea Como mucho, recomiendo mucho que se familiarice con él, porque es insuperable cuando se trata de la depuración de C/C++. La línea de comandos puede parecer de los años 70, pero una buena configuración de vim/gcc/make/gdb supera a Eclipse CDT a la larga. Para usuarios de Windows, recomiendo Cygwin. -

3 Respuestas

En Eclipse, en realidad no puede abrir archivos individuales que no estén asociados con proyectos (lo que puede ser bastante molesto).

Cree un proyecto y agréguele el archivo. Entonces podrás abrir el archivo ;)

EDITAR: Está bien, resulta que no leí tu pregunta correctamente. Ignora esto por favor :)

Respondido el 12 de junio de 12 a las 15:06

Gracias, ¿cómo agregar un archivo existente a mi proyecto? - Lc0rE

¿Qué tal hacer una llamada a getcwd para encontrar el directorio actual del proceso?

  char dir[1024];
  getcwd(dir,1024);

Alternativamente, ¿podría especificar la ruta absoluta al archivo?

Respondido el 12 de junio de 12 a las 15:06

¿Era necesario especificar la ruta absoluta? - Lc0rE

¿Cómo estás abriendo el archivo? fopen? Entonces en lugar de fopen("foo.txt","r") podría ser fopen("/home/me/stuff/foo.txt","r") - gcbenison

sí, lo estoy haciendo correctamente y puedo abrir el archivo de la manera correcta ejecutándolo con (casi) todos los IDE excepto eclipse - Lc0rE

Entonces, ¿ha intentado abrir con una ruta absoluta, por ejemplo, "/home/..."? - gcbenison

Debe colocar el archivo de texto que desea abrir en la carpeta del proyecto Eclipse que (probablemente) se encuentra en la carpeta de su espacio de trabajo (o llamar a la función que abre el archivo de texto con la ruta absoluta). Si crea un nuevo proyecto, puede ver la ruta de la carpeta de su espacio de trabajo en la ventana del asistente de nuevo proyecto.

Editar: podría ser la solución a su problema Leer de archivo en eclipse

¿Intentó actualizar (clic derecho -> actualizar) la carpeta del proyecto después de copiar el archivo allí? Eso SINCRONIZARÁ su sistema de archivos con el sistema de archivos interno de Eclipse.

contestado el 23 de mayo de 17 a las 13:05

creé un nuevo proyecto llamado "9.1" y está correctamente posicionado en la ruta del "área de trabajo"... puse el "archivo.txt" en cada directorio bajo la carpeta "9.1" pero simplemente Eclipse no reconoce ningún archivo. - Lc0rE

¿Se genera el ejecutable en el mismo directorio en el que también tiene su archivo de texto? - Simon

No puedo reproducir tu error. Hice un pequeño proyecto y coloqué un archivo "test.txt" en la carpeta del proyecto. Vocación fopen("test.txt", "r") no regresa NULL (construido y ejecutado dentro de Eclipse) y, por lo tanto, el archivo se puede leer sin problemas. ¿Qué tipo de error estás recibiendo? - Simon

Bueno, estoy pasando el nombre del archivo a través de la línea de comando como "argv[1]" pero no pasa nada... ¡no he intentado abrir un archivo con su nombre! - Lc0rE

Muestra tu código. si pasas argv[1] debe ingresar el nombre del archivo debajo Run > Run Configurations... en la Arguments pestaña. - Simon

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.