Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C文件读取中:如何在同一个文件上多次执行FGET?_C - Fatal编程技术网

在C文件读取中:如何在同一个文件上多次执行FGET?

在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循环

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);