代码片段在while循环后有一个EOF,之后必须重新打开文件 - 重新使用fopen。我的问题是,是否有办法避免这种笨拙的双重使用fopen或不以某种方式使用EOF?
if (!(f=fopen("D:\\C\\Test.txt", "r")))
{
printf("File not existing\n");
}
while ((next=fgetc(f))!=EOF){
if (next=='1') num++;
}
printf("%d\n", num);
f=fopen("D:\\C\\Test.txt", "r");
while (fgets(buf, 1000, f)!=NULL)
printf("%s", buf);
希望我足够清楚。
答案 0 :(得分:7)
首先,如果重新打开,则应在重新打开之前fclose()
。如果不这样做,则“泄漏”了计算机资源 - 您有一个无法访问的打开文件流。
其次,您可以fseek()
到文件的开头,或者您可以rewind()
该文件,而无需重新打开文件:
fseek(f, 0L, SEEK_SET);
rewind(f);
您还应该注意,您显示的代码报告第一次无法打开文件,但继续使用该文件就像成功一样。这不太可能带来幸福。您还应该检查第二次打开的成功(如果您重新打开)。仅仅因为文件在一秒钟之前存在并不意味着它仍然存在(尽管失败的可能性很小,我授予你)。
答案 1 :(得分:3)
使用倒带(f)功能。 它将文件指针重置为head,因此在rewind()文件之后与第1次fopen()之后相同。 有关详细信息,请参阅:http://linux.die.net/man/3/rewind
答案 2 :(得分:0)
a)fseek
到开头
或
b)重新打开前关闭文件