2011-10-29 169 views
1

我有程序proba2.exe和文件text.txt在同一個文件夾,當我在項目屬性中設置命令行參數它不能打開文件,但是當我從命令提示符運行程序時它工作正常。C程序無法打開文件

/* count.c -- using standard I/O */ 
#include <stdio.h> 

#include <stdlib.h> // ANSI C exit() prototype 
int main(int argc, char *argv[]) 
{ 
    int ch;   // place to store each character as read 
    FILE *fp;  // "file pointer" 
    long count = 0; 

    if (argc != 2) 
    { 
     printf("Usage: %s filename\n", argv[0]); 
     exit(1); 
    } 
    if ((fp = fopen(argv[1], "r")) == NULL) 
    { 
     printf("Can't open %s\n", argv[1]); 
     exit(1); 
    } 
    while ((ch = getc(fp)) != EOF) 
    { 
     putc(ch,stdout); // same as putchar(ch); 
     count++; 
    } 
    fclose(fp); 
    printf("File %s has %ld characters\n", argv[1], count); 

    return 0; 
} 

enter image description here

enter image description here enter image description here

它工作正常運行cmd.exe的從 enter image description here 也工作得很好(但文件的名稱寫全路徑),當我指定完整路徑命令參數項目屬性窗口 enter image description here

+0

嘗試在運行配置選項中添加您的工作目錄 –

+0

從Netbeans運行時,工作目錄可能是c:\用戶\ don \文件\ netbeansprojects \ proba2,試圖驗證 – nos

回答

3

確保正在運行的程序的工作目錄與從資源管理器啓動時存儲程序文件的目錄相同。我不確定這可以在Windows中設置,但我認爲這是問題..

+0

查看圖片2文件text.txt文件在debug目錄中,其中is和proba2.exe當我使用cd命令更改cmd.exe中的目錄時我只需鍵入proba2 .exe文本.txt和程序工作正常,但從項目屬性我必須輸入完整路徑和程序代碼printf(「文件%s有%ld字符\ n」,argv [1],計數);將完整路徑寫爲文件的名稱。我想我把text.txt文件放在錯誤的調試目錄中,或者是什麼 – gameboy

+1

該文件位於正確的目錄中。當您從cmd shell啓動程序時,當前工作目錄是.exe文件所在的目錄。因此,將文件text.txt的名稱作爲命令行參數傳遞就足夠了。如果以某種其他方式(例如,從IDE或資源管理器)啓動程序,則可能是由於它以不同的工作目錄啓動。您可以通過調用函數來檢查當前的工作目錄:char * getcwd(char * buffer,int size);請參閱http://msdn.microsoft.com/en-US/library/ms235450%28v=VS.80%29.aspx – Giorgio