2012-12-23 45 views
-1

我處於編碼的最初階段,並陷入了我的問題。想要在循環的不同階段閱讀不同的文本文件

我的(比方說10)文本文件數量,他們需要通過一個在我的代碼寫在C.

中使用的一個舉例說明:拿一個,讀它,執行的主要功能,寫其解決方案,並繼續下一步。

我想寫一個for循環。由於我無法概括txt文件的名稱,因此在「fopen」函數中更改名稱後,我必須運行我的代碼10次。我會讓這些跑步超過三百次,這意味着這將是一個非常重要的問題。

我很樂意聽取您的建議。

+2

問題變得毫無意義:「我會讓這些運行超過三個百倍,這意味着這將是一個非常重要的問題「 - 呃,什麼?您需要嘗試,並在出現特定問題時回來。 –

+0

這將是一個非常重要的問題,如果我找不到一種方法使其自動化..我認爲在我做這些運行之前詢問它會更好,不會嗎?我已經做了我的初步驗證,我得出結論,它正在工作,但爲了分析其性能,我需要做這些運行.. –

回答

1

因爲我不能一概而論的txt文件的名稱

其實,你可以;您可以將文件的名稱存儲在數組中,然後遍歷數組並使用for並調用向其傳遞文件名的數據的函數(如果您願意的話,甚至可以使用FILE *)。

東西沿着

const char *fileNames[]={"a.txt", "b.txt", "randomjunk.txt", "otherstuff.txt"}; 
int i; 
for(i=0; i<sizeof(fileNames)/sizeof(*fileNames); i++) 
    ElaborateFile(fileNames[i]); 

線,其中ElaborateFile是你的函數制定一個給定的文件。


編輯:如果,如你所說,文件名被存儲在另一個文件中,它仍然非常容易;假設該文件上下工夫指定每行一個:

char fileName[260]={0}; /* adjust buffer size as needed */ 
FILE * fp=fopen("filelist.txt", "r"); 
while(fgets(fileName, sizeof(fileName), fp)) 
{ 
    size_t len=strlen(fileName); 
    if(len==0) 
     continue; /* empty line, skip it */ 
    if(fileName[len-1]!='\n') 
    { 
     /* if the last character isn't a newline it means that the buffer 
      wasn't big enough - abort the process */ 
     puts("File path too long."); 
     break; 
    } 
    /* fgets acquires also the carriage return, remove it */ 
    fileName[len-1]=0; /* cut the string */ 
    ElaborateFile(fileName); /* perform the elaborations on the file */ 
} 
fclose(fp); 
+0

其實我創建我的txt文件是實例。我已經在其他文本文件中寫下了他們的名字。我認爲這會有所幫助。但是我不知道如何使用它們。如果在你的例子中寫入每個txt名字,它會花費太多時間 –

+0

更好的是,從文本文件中讀取文件名並將它們傳遞給你的'ElaborateFile'(或者你的函數被調用)。 –

0

如果所有你需要閱讀的文件是在同一個(最好是分)目錄,或者如果所有的人都是一樣的擴展名(比方說.TXT)你總是可以讀取目錄中的所有文件名稱,如下面的例子:

DIR *dir; 
struct dirent *ent; 
    dir = opendir ("c:\\src\\my_ide\\my_program\\"); 
if (dir != NULL) { 

    while ((ent = readdir (dir)) != NULL) { 
    run_your_function_on(ent->d_name); 
    } 
    closedir (dir); 
} else { 
    /* could not open directory */ 
    perror (""); 
    return EXIT_FAILURE; 
} 
相關問題