EOF到达后读取文件

时间:2013-12-29 23:28:27

标签: c

代码片段在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);

希望我足够清楚。

3 个答案:

答案 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)重新打开前关闭文件