C 达到EOF后读取文件
代码段在while循环后有一个EOF,之后必须重新打开该文件-重新使用fopen。我的问题是,是否有办法避免这种笨拙的fopen重复使用,或者以某种方式不使用EOFC 达到EOF后读取文件,c,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++; } pri
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);
希望我足够清楚。使用倒带(f)功能。
它会将文件指针重置回磁头,所以在rewind()之后的文件与第一次fopen()之后的文件相同。
有关详细信息,请参见:首先,如果重新打开,则应在重新打开前执行
fclose()
。如果您不这样做,您就是在“泄漏”计算机资源—您有一个无法访问的打开文件流
第二,您可以直接打开文件的开头,也可以直接打开文件,而无需重新打开文件:
fseek(f, 0L, SEEK_SET);
rewind(f);
您还应该注意,如图所示的代码报告它在第一次打开文件时失败,但继续使用该文件,就像它成功一样。这不太可能带来幸福。您还应该检查第二次打开是否成功(如果重新打开)。仅仅因为文件在一秒钟前就在那里并不意味着它还在那里(尽管失败的可能性很小,我同意你)。a)fseek
从头开始
或
b) 在重新打开之前关闭文件您可以查看开头的.Tnx以进行回复,使用“倒带”并解决问题。我发现它现在开得不好。我该如何解决这个问题呢?如果文件没有打开,可能是文件名有问题。你在一台Windows机器上;显然,您有一个
D:
驱动器,其中包含用于C项目的文件夹D:\\C
。文件Test.txt
是否确实存在于该文件夹中?你有运行它的权限吗?您似乎有足够的反斜杠,但Windows API(但不是cmd.exe
程序和等效程序)接受/
(斜杠)作为\
(反斜杠)的同义词。是的,文件存在,我可以完全控制它。如果fopen()
无法打开它,那么要么程序中的名称错误,要么磁盘上的文件有问题。您可能可以从
)和strerror()
(从
)中找到有关错误的更多信息。但是,基本上,如果文件没有打开,程序或文件名都会出现问题-请选择,但我们无法轻松地为您远程解决。可以考虑将文件名传递为命令行参数,并打开命令行上指定的文件。这允许您在不重新编译的情况下测试替代名称。