2017-06-16 68 views
-3

我想在C中創建一個命令行程序,它應該允許用戶輸入我的自定義命令,選擇一個選項並在用戶文件上執行功能。該程序將根據選擇的選項執行不同的功能。該程序還應該能夠識別計算機上是否存在文件。如何在C中創建命令行程序C

例如,如果我的自定義命令是encodethis,用戶將輸入encodethis -e <filename>來對文件進行編碼。

這是我迄今爲止試過的,以檢查用戶是否輸入了正確的參數。

#include <stdio.h> 
#include <string.h> 

/* main function to copy strings*/ 

int main (int argc, char * argv[]) { 

    if (argc == 3) { 
     if (strcmp (argv[0], "myencode") == 0) { 
      if (strcmp (argv[1], "-e") ==0) { 
       /* Check user input against files in computer*/ 

現在我的問題是以某種方式檢查用戶輸入的文件名與他的電腦中的文件,看看它是否存在。我不知道如何檢查argv[]數組中的第三個數值,因爲它是由用戶輸入的,並且最初未定義。任何幫助都感激不盡。

+0

爲什麼你認爲它是不確定的?如果'argc'是3那麼'argv [2]'應該包含一些東西 –

+0

爲什麼你根本檢查'argv [0]'?你是否真的*希望你的程序在重命名時被中止或失敗,或者只是以'argv [0]'未被設置的方式調用,或者如果一個合格的路徑如'/ path/to/myencode'而不是myencode的基本名稱在該字段中? –

+0

如果您遇到的問題是檢查文件是否存在,那麼您的問題應該是* only *,其他所有內容(即命令行參數列表位)都將被排除。 –

回答

0

你可以做這樣的事情:

#include <stdio.h> 
#include <string.h> 

/* main function to copy strings*/ 

int main (int argc, char * argv[]) { 

    if (argc == 3) { 
     if (strcmp (argv[0], "myencode") == 0) { 
      if (strcmp (argv[1], "-e") ==0) { 
       /* Check user input against files in computer*/ 
       FILE *fp; 
       fp = fopen(argv[2],"r+"); 
       if (fp!=NULL){ 
        /* your stuff goes here, don't forget to close 
         the file with fclose(fp) 
        */ 
       }else{ 
       printf("Error: could not open file\n"); 
      } 
     } 
    } 
return 0; 
} 

來源:C File I/O

+0

感謝您的回答。 FILE * fp部分是否意味着用戶可以輸入他們想要的任何文件名,並且將檢查他們的計算機以查看是否存在該文件的任何文件? – Noob

+0

如果文件打開,'fopen()'函數返回一個指向FILE的指針,否則返回'NULL'。如果文件未找到或者沒有足夠的權限或其他原因,則打開可能會失敗。 「找不到文件」只是由於'fopen()'可能返回'NULL'的可能性之一。 – magicleon

+0

我明白了,所以'fp = fopen(argv [2],「r +」);'表示程序會檢查argv []數組中的第三個元素並嘗試打開該文件名? – Noob