2011-04-04 56 views
1

目前,我的程序在.txt文件中讀取時沒有問題,但我的程序需要讀取具有不同文件擴展名的文本文件(.emu是要求) 。當簡單地將相同文件的擴展名改爲.emu時,變量'file'爲NULL,因此該文件未打開,任何人都可以幫忙嗎?讀取.txt文件中的不同擴展名C

有大約一點觀察一下,一直沒能找到解決的辦法,所以任何的幫助深表感謝

這裏的源代碼:

void handleArgs (const char *filename, int trace, int before, int after) { 
FILE *file = fopen(filename, "r"); 
char *address = malloc(MAX_ADD_LENGTH * sizeof(char)); 
char *instruction = malloc(MAX_INS_LENGTH * sizeof(char)); 
long int addressDecoded; 

if (file == NULL || file == 0) { 
    fprintf(stderr, "Error: Could not open file"); 
} 
else { 
    if (ferror(file) == 0) { 
     while (fscanf(file, "%s %s", address, instruction) != EOF) { 
      if (strlen(address) == 8 && strlen(instruction) == 8) { 
       addressDecoded = strtol(address, NULL, 16); 
       printf("%ld\n", addressDecoded); 
       //instruction = decodeInstruction(instruction); 
      } 
      else { 
       fprintf(stderr, "Error: particular line is of wrong length"); 
      } 

     } 
    } 
} 

fclose(file); 

}

參數「文件名」當執行時只是'/foopath/test.emu'

+1

你可以發佈打開你的文件句柄的源代碼嗎? – 2011-04-04 19:49:39

+3

你能發表一些代碼嗎?當你試圖打開它時,文件在那裏嗎?擴展對'fopen'沒有影響,所以肯定還有別的事情在進行 – rlc 2011-04-04 19:49:58

+0

你的問題不是擴展。 – 2011-04-04 19:50:30

回答

4

C沒有什麼特別的文件擴展名。重新讀取您的代碼中的簡單錯誤,例如在一個地方更改文件名,但不是其他地方。如果您傳遞文件名,請傳遞整個名稱,而不是該時段左側的部分。

+0

另外 - 確保新文件處於當前工作狀態,沒有設置爲只讀,並且您試圖以寫入模式打開,用戶上下文有權訪問該文件,確保另一個程序沒有該文件文件同時打開(在Windows中,無論如何)等,等等,等等。 – tamarintech 2011-04-04 19:53:37

+0

固定,OSX是隱藏的事實,當我把文件重命名爲'test.emu',它實際上只是'test.emu.txt ' – 2011-04-14 11:26:08

+0

@我知道了。當我遇到它時,我總是禁用這個「功能」。 – 2011-04-14 14:31:23

1

文件是數據,並有名稱。在名稱之前出現的內容與之後的內容相同 - 擴展名創建的提示文件僅包含文件的內容,但不需要嚴格相關該文件的內容

該文件可能不存在,或者您的權限可能不足以打開它。或者也許還有其他一些錯誤。你怎麼診斷這個?

當你使用一個系統調用,它的行爲不想要的方式,有一個在errno.h#include <errno.h>)稱爲errno變量將包含代表最後一次通話狀態的數量。有一大堆符號常量可以將名稱添加到這些值中,您可以將其升級。

例如,如果你試圖打開一個文件,並返回的指針是沒用的,你可能要檢查errno,看看是否存在的文件,或者如果你exceding系統限制爲打開文件等

相關問題