我一直在这个问题上停留了一段时间。我在这里有一个循环,它将读取包含文件名的文本文件。循环逐一读取这些行,并通过变量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