在C文件读取中:如何在同一个文件上多次执行FGET?
比如, 我在文件中有一个while循环在C文件读取中:如何在同一个文件上多次执行FGET?,c,C,比如, 我在文件中有一个while循环 while (fgets(line, MAXLINE-1, filePointer)!=NULL){ // do something; } fclose(filePointer); 循环完成后,如果在同一个文件上调用fgets,将返回null,因为fgets已经完成了整个文件。如果我想使用fgets()?重置文件指针,可以使用两种方法重新读取文件: rewind(fp); 以及: 其中,fp是文件指针。然后,您可以再次调用fgets()从文件的开头读取
while (fgets(line, MAXLINE-1, filePointer)!=NULL){
// do something;
}
fclose(filePointer);
循环完成后,如果在同一个文件上调用fgets,将返回null,因为fgets已经完成了整个文件。如果我想使用
fgets()
?重置文件指针,可以使用两种方法重新读取文件:
rewind(fp);
以及:
其中,
fp
是文件指针。然后,您可以再次调用fgets()
从文件的开头读取文件。在while循环结束时,发生的情况是文件指针到达文件的结尾(称为EOF)。操作系统会记录指针的位置,以跟踪您在文件中的位置或位置,以便从该位置进一步读取。您只需将该文件指针移到文件的开头即可。现在有两种方法可以使用rewind()方法或fseek()方法。这就是为什么:
rewind(fp);
或
再次读取同一文件之前请使用此选项。对于记录,fp指的是您试图读取的文件
manfseek
…或尝试使用倒带(file*stream);你不能将读取的行存储在变量中,而不是在文件中来回移动吗?旁白:fgets(line,MAXLINE-1,filePointer)
中的-1是可疑的。发布更多的代码将有助于确定它对这个问题的影响。奇怪的是,0L
与简单的0
有什么特别的原因吗?@chux我记得我曾经看到过这样的情况,所以这只是从记忆中提取出来的。@chux给出了这个例子。可能要强调的是,这需要花费很长时间
…@EugeneSh。它也在C规范中——除了试图说明问题之外,我没有考虑其他原因。你觉得有必要吗?@chux我看不出零号的情况有什么必要。只有当他们假设可以用某个大常量替换0
,并使用某个实际需要后缀的旧标准时。您应该补充,某些流不支持查找,例如终端和管道。@chqrlie;非挥发性物质;我的错;我在倒带或查看之前关闭文件;并意识到我应该在关闭我的文件之前这样做。但是谢谢你的回复,你可以关闭文件,然后再打开它。是的,如果它要到终端或其他地方,它将无法正常工作。
rewind(fp);
fseek(fp, 0, SEEK_SET);