2012-06-12 3 views
-2

Я написал что-то в C, которому нужно открыть file.txt и управлять некоторыми данными. Я только начал использовать Eclipse (после Code :: blocks и Netbeans), но я не могу найти правильный путь для размещения моего файла, чтобы позволить Eclipse читать его ... какие-либо предложения?Открыть файл в Eclipse

#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; 
} 
+0

Правильно ли указано имя файла в сообщении об ошибке (в предложении 'fp == NULL')? – simon

+0

«Что такое« лучший выбор »(на ваш взгляд) для C/C++ IDE в Unix?» - здесь задавались многочисленные вопросы, подобные этому, и закрыты для того, чтобы быть субъективными и приводить к бесконечной евангелизации. Тем не менее, * мое предложение предполагает ** не ** использовать IDE в начале, но с использованием компилятора командной строки и простого текстового редактора, потому что вы хотите изучить ** C **, а не Eclipse/NetBeans/MSVC/.... – DevSolar

+0

@simon имя напечатано правильно да ... – Lc0rE

ответ

0

Вы должны поместить текстовый файл, который вы хотите открыть в папке проекта Eclipse Project, который является (возможно) в папке рабочего пространства (или вызовите функцию, которая открывает текстовый файл с абсолютным путем). Если вы создаете новый проект, вы можете увидеть путь к папке рабочего пространства в новом окне мастера проекта.

Edit: Может быть решение вашей проблемы Read from file in eclipse

Вы попробуйте обновить (правой кнопкой мыши -> Обновить) папку проекта после копирования файла там? Это будет SYNC вашей файловой системы с внутренней файловой системой Eclipse.

+0

Я создал новый проект под названием «9.1», и он правильно позиционируется в пути «рабочей области» ... Я помещаю файл «file.txt» в каждый каталог в папке «9.1», но просто Eclipse не распознает какой-либо файл. – Lc0rE

+0

Является ли исполняемый файл сгенерированным в том же каталоге, что и ваш текстовый файл? – simon

+0

Возможно, связанный с этим вопрос (см. Обновленный ответ). – simon

0

Как насчет того, чтобы поставить вызов getcwd, чтобы найти текущий «текущий каталог»?

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

В качестве альтернативы вы не указали бы абсолютный путь к файлу?

+0

Должен ли я указать абсолютный путь? – Lc0rE

+0

Как вы открываете файл? 'Fopen'? Затем вместо 'fopen (" foo.txt "," r ")' будет 'fopen ("/home/me/stuff/foo.txt "," r ")' – gcbenison

+0

да, я делаю это правильно и Я могу открыть файл в правильном порядке, используя его (почти) каждую среду IDE, за исключением eclipse – Lc0rE

0

В Eclipse вы фактически не можете открывать отдельные файлы, не связанные с проектами (что может быть довольно неприятно).

Создайте проект и добавьте к нему файл. Затем вы сможете открыть файл;)

EDIT: Хорошо, оказывается, я не правильно прочитал ваш вопрос. Игнорируйте это, пожалуйста :)

+0

Спасибо, как добавить существующий файл в мой проект? – Lc0rE

Смежные вопросы