2012-06-12 78 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

「在Unix下,C/C++ IDE的'最佳選擇'(在你看來)是什麼?」 - 這樣的問題已經在這裏提出,並因爲主觀因素而導致無休止的傳福音。但是,*我的建議是**不是**在開始時使用IDE,而是使用命令行編譯器和簡單的文本編輯器,因爲您想學習** C **,而不是Eclipse/NetBeans/MSVC/... – DevSolar

+0

@simon名稱打印正確是... – Lc0rE

回答

0

你需要把你想在這(可能)在您的工作文件夾中的Eclipse項目的文件夾中打開文本文件(或調用使用絕對路徑打開文本文件的功能)。如果您創建一個新項目,您可以在新項目嚮導窗口中看到工作區文件夾的路徑。

編輯:可能是解決你的問題Read from file in eclipse

你嘗試刷新(右鍵 - >刷新)在那裏複製文件後,項目文件夾?這將與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中,您實際上無法打開與項目無關的單個文件(這可能很煩人)。

創建一個項目並添加文件。然後你將能夠打開該文件;)

編輯:好吧,事實證明我沒有正確閱讀你的問題。請忽略此:) :)

+0

謝謝,如何將現有的文件添加到我的項目? – Lc0rE