首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EOF到达后读取文件

问EOF到达后读取文件
EN

Stack Overflow用户
提问于 2013-12-29 23:28:27
回答 3查看 1.9K关注 0票数 0

代码片段在while循环之后有一个EOF,文件必须在之后重新打开-- fopen被重用。我的问题是,是否有办法避免这种笨拙的双重使用fopen还是不以某种方式使用EOF?

代码语言:javascript
复制
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);

希望我说的够清楚了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-29 23:32:12

首先,如果要重新打开,则应该在重新打开之前进行fclose()。如果您不这样做,您正在“泄漏”计算机资源-您有一个打开的文件流,您无法访问。

其次,您可以fseek()到文件的开头,也可以rewind()文件,而不需要重新打开该文件:

代码语言:javascript
复制
fseek(f, 0L, SEEK_SET);
rewind(f);

您还应该注意到,如图所示,您的代码报告说,它第一次打开文件失败了,但是继续使用该文件,就好像它成功了一样。这不太可能带来幸福。您还应该检查第二次打开的成功与否(如果您做了重新打开)。仅仅因为文件在一秒钟前还在那里,并不意味着它仍然存在(尽管失败的可能性很小,我承认)。

票数 7
EN

Stack Overflow用户

发布于 2013-12-29 23:32:10

使用反向(F)函数。它将文件指针重新设置为头,因此在倒带()文件后与第1次fopen()相同。有关详细信息,请参阅:http://linux.die.net/man/3/rewind

票数 3
EN

Stack Overflow用户

发布于 2013-12-29 23:32:33

( a) fseek到开头

或

( b)在重新打开之前关闭文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20831252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档