我處於編碼的最初階段,並陷入了我的問題。想要在循環的不同階段閱讀不同的文本文件
我的(比方說10)文本文件數量,他們需要通過一個在我的代碼寫在C.
中使用的一個舉例說明:拿一個,讀它,執行的主要功能,寫其解決方案,並繼續下一步。
我想寫一個for循環。由於我無法概括txt文件的名稱,因此在「fopen」函數中更改名稱後,我必須運行我的代碼10次。我會讓這些跑步超過三百次,這意味着這將是一個非常重要的問題。
我很樂意聽取您的建議。
我處於編碼的最初階段,並陷入了我的問題。想要在循環的不同階段閱讀不同的文本文件
我的(比方說10)文本文件數量,他們需要通過一個在我的代碼寫在C.
中使用的一個舉例說明:拿一個,讀它,執行的主要功能,寫其解決方案,並繼續下一步。
我想寫一個for循環。由於我無法概括txt文件的名稱,因此在「fopen」函數中更改名稱後,我必須運行我的代碼10次。我會讓這些跑步超過三百次,這意味着這將是一個非常重要的問題。
我很樂意聽取您的建議。
因爲我不能一概而論的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);
其實我創建我的txt文件是實例。我已經在其他文本文件中寫下了他們的名字。我認爲這會有所幫助。但是我不知道如何使用它們。如果在你的例子中寫入每個txt名字,它會花費太多時間 –
更好的是,從文本文件中讀取文件名並將它們傳遞給你的'ElaborateFile'(或者你的函數被調用)。 –
如果所有你需要閱讀的文件是在同一個(最好是分)目錄,或者如果所有的人都是一樣的擴展名(比方說.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;
}
問題變得毫無意義:「我會讓這些運行超過三個百倍,這意味着這將是一個非常重要的問題「 - 呃,什麼?您需要嘗試,並在出現特定問題時回來。 –
這將是一個非常重要的問題,如果我找不到一種方法使其自動化..我認爲在我做這些運行之前詢問它會更好,不會嗎?我已經做了我的初步驗證,我得出結論,它正在工作,但爲了分析其性能,我需要做這些運行.. –