2013-02-16 155 views
0

我正在編寫一個應該能夠執行命令行參數的程序。 基本上,用戶必須能夠在調用程序時通過命令提示符指定文件名。即程序應該能夠接受如下參數: doCalculation -myOutputfile.txt。其中doCalculation是我的程序的名稱,myOutputfile是我希望將結果寫入到的文件(即將我的計算結果輸出到指定的文件名)。使用命令行輸出到文件

到目前爲止,我可以通過命令提示符調用我的函數。我不確定如何讓我的程序寫入指定的文件名(或者如果它不存在,則創建該文件)。

我的代碼如下:

int main(int argc, char *argv[]) 
{ 
    FILE* outputFile; 
    char filename; 

    // this is to make sure the code works 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     printf("argv[%d] = %s\n", i, argv[i]); 
    } 

    //open the specified file 
    filename= argv[i]; 
    outputFile = fopen("filename", "r"); 

    //write to file 
    fclose(outputFile); 
} 
+1

你甚至試過閱讀C庫的文檔嗎?閱讀fopen函數的模式參數說明。 – dbenham 2013-02-16 20:42:32

+1

一個簡單的Google搜索「c寫入一個文件示例」產生的綽綽有餘的例子。 – dbenham 2013-02-16 20:45:32

+0

正如博C.建議,您需要添加一行,如'fprintf(outputFile,「blah blah」);'實際寫入您打開的文件。 – 2013-02-16 22:13:18

回答

0

所以,有兩件事情,我注意到...

  1. 如果要寫入文件,使用「W」爲寫模式,而不是當打開文件時,讀取模式爲「r」。
  2. 您將文件名聲明爲單個字符而不是指向字符串(char *)的指針。使它成爲指針將允許長度大於1的文件名(字符數組而不是單個字符)。
  3. 正如Ashwin Mukhija所提到的那樣,當for循環將其設置爲2時,您將使用i,但實際上您需要第二個(索引1)參數。
  4. 您將open()函數中的文件名參數作爲文件名「filename」而不是文件名變量。

看看這段代碼是否有助於解決您的問題,(我也扔了一個fprintf()在那裏向您展示如何寫入文件)。 乾杯!

int main(int argc, char *argv[]) 
{ 
    FILE* outputFile; 
    char* filename; 

    // this is to make sure the code works 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     printf("argv[%d] = %s\n", i, argv[i]); 
    } 

    //saftey check 
    if(argv[1]) 
    { 
     filename = argv[1]; 

     //open the specified file 
     outputFile = fopen(filename, "w"); 

     fprintf(outputFile, "blah blah"); 

     //write to file 
     fclose(outputFile); 
    } 

    return 0; 
}