2013-02-08 208 views
5

我很難從不同於EXE文件夾的目錄中打開文件。我設法讀取一個文件。但是如何使用程序在循環中讀取目錄中的多個文件。從目錄中讀取多個文件

用於單個文件處理的代碼如下:

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

int main() 
{ 
    FILE *fp, *tp, *tl; 
    char str_buff[1024] = { FALSE }; 
    char str[125]; 
    char strlengths[MAX_NO_OF_STRINGS]= { FALSE }; 
    //int Result; 
    //int string_startflag = FALSE; 
    int string_cntr = FALSE,i = 0, n = 0; 

    fp = fopen("D:/folder/language/stringEnglish.h", "r"); 
    tp = fopen("New Text Document.txt", "w"); // open the file to Write 
    tl = fopen("New Length Document.txt", "w"); // open the file to Write lengths 

    while (NULL != fgets(str_buff, sizeof(str_buff), fp)) 
    { 
     sscanf(str_buff, "%*[^\"]%*c%[^\"]%*c%*[^\n]%*c", str); 

     //printf("%s\n", str); 

     if (string_cntr > 6) 
     { 
      if (string_cntr<= MAX_NO_OF_STRINGS) 
      { 
       fprintf(tp, "%s\n", str); 
       strlengths[i] = strlen(str); 
       i++; 
      } 
     } 
     string_cntr++; 
    } 

    for(n=0;n<(MAX_NO_OF_STRINGS-6);n++) 
    { 
     fprintf(tl,"%d\n",strlengths[n]); 
    } 

    fclose(fp); 
    fclose(tp); 
    fclose(tl); 

    return 0; 
} 

所以我能夠處理文件解析文件中的變量,並獲得字符串的長度。問題是如何打開多個文件,我必須在文件夾中語言文件名:

stringItalian.h,stringLatvian.h,stringSlovakian.h,stringSlovenian.h,stringSpanish.h,stringSwedish.h,stringTurkish.h,stringUkrainian.h 

我怎樣才能在一個循環中打開這些名字的文件?

還有什麼辦法給文件夾路徑的一般方式D:/folder/language

在此先感謝。

回答

0

你可以傳遞路徑作爲命令行參數到你的程序,讀取它的值從argv[1]如果它是第一個參數,然後通過你想讀的不同文件循環:

int main(int argc, char* argv[]) 
{ 
    ... 
    const char* files[] = {"stringItalian.h", "stringLatvian.h", 
          "stringSlovakian.h", "stringSlovenian.h", 
          "stringSpanish.h", "stringSwedish.h", 
          "stringTurkish.h", "stringUkrainian.h"}; 
    int i; 
    char fullpath[256]; 

    for (i=0; i<sizeof(files)/sizeof(files[0]); i++) { 
     strcpy(fullpath, argv[1]); 
     strcat(fullpath, files[i]); 
     fp = fopen(fullpath, "r"); 
+0

謝謝你一定會幫助我。將嘗試這種方法 – tanve3r

0

我建議首先將文件的實際解析放入一個單獨的函數中,以便只用文件名即可調用該函數。

最簡單的事情就是創建一個帶有文件名的表格,並循環遍歷這個表格,給出剛創建的函數的文件名。

+0

謝謝你將使用function.simonc做解析提供了一個很好的例子將使用函數合併它 – tanve3r

0

您可以通過將函數放入函數中來重寫程序,例如processFile(char * fileName),然後使用完整路徑文件名稱(例如,

processFile("D:/folder/language/stringEnglish.h"); 
processFile("D:/folder/language/stringItalian.h"); 

你也可以把文件名的文件來處理,並在該文件中的行程序改寫爲循環和調用函數與它找到的文件名。

0

正如simonc所說的你可以通過argv給出.h's的路徑,但問題是這仍然要求你在編譯時知道.h's的名字。

我假設你想在目錄中遍歷所有.h的。有跡象表明,讓你這樣做跨平臺(搜索關鍵字)庫,或者你可以做到這一點DEP您的操作系統:

  • 的Linux: - >dirent

  • 的Windows:用FindFirstFile FindNextFile - >msdn

    (或一點點的hackish,但也許你輕鬆很多:第一次使用系統()將dir/LS的* .h爲.txt文件,然後閱讀)