我一直在這個問題上停留了一段時間。我在這裏有一個循環,它將讀取包含文件名的文本文件。循環逐一讀取這些行,並通過變量sFileName將其設置到內存中。 sFileName稍後被調用來加載圖像,並且該程序在循環加載它時逐個執行此操作。用戶然後爲圖像選擇一個標籤並加載下一個標籤。標記和圖像文件名被導出到另一個名爲imgresults.txt的文本文件中。現在,帶有文件名的文本文件是幾千行。因此,如果用戶必須退出程序並在稍後嘗試繼續,則循環將重新啓動,而不是在程序關閉時停止。C++使用while循環讀取文件,從「x」行開始
我想找到一種方法讓循環開始在那一點。到目前爲止,我決定使用getline()來計算imgresults.txt中當前有多少行,因爲這會提供已經在程序中運行的圖像的數量。該號碼存儲在變量「x」中。我一直在做很多研究,但我無法找到如何爲while循環開始的行「x」設置條件。你們有什麼建議嗎?另外,如果您需要任何澄清,請詢問。我只包含關於循環的代碼,因爲加載圖像的代碼是完美的。
int _tmain(int argc, _TCHAR* argv[])
{
int value = 0;
int nCounter = 0;
FILE* fIn = NULL;
char * sLine = new char[MAX_FILENAME_SIZE];
char * sFileName = new char [MAX_FILENAME_SIZE];
char * s = new char [MAX_FILENAME_SIZE];
#define ImgListFileName "path"
#define ImgRepository "path"
if ((fIn = fopen(ImgListFileName,"rt"))==NULL)
{
printf("Failed to open file: %s\n",ImgListFileName);
return nCounter;
}
ifstream imgresults;
imgresults.open ("imgresults.txt");
int x=0;
string line;
while(!imgresults.eof()) {
getline (imgresults, line);
x++;
}
srand (time(NULL));
cout << x;
while(!feof(fIn)){
memset(sLine,0,MAX_FILENAME_SIZE*sizeof(char));
memset(sFileName,0,MAX_FILENAME_SIZE*sizeof(char));
memset(s,0,MAX_FILENAME_SIZE*sizeof(char));
fgets(sLine,MAX_FILENAME_SIZE,fIn);
strncpy(s,sLine,65);
strcat(sLine,"\0");
strcat(sFileName,s);
printf (sFileName);
nCounter++;
}
在此先感謝!
查看http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong而你在它。 – Mat 2012-07-08 15:20:19
您必須將'x'保存到某個文件中。如果你要使用C++,請清除char數組,memset,strcpy和類似的東西。改用'std :: string'和標準算法。 – jrok 2012-07-08 15:25:51