对于C中的文件指针,如何测量当前位置到文件末尾之间的距离?

问题描述 投票:0回答:3

对于给定的文件指针(FILE *),可以快速确定从当前位置到文件末尾的距离。

确定实际距离所花费的时间不应该取决于距离。

例如,fpos_t的减法,但fpos_t不是整数,因此无法进行数值运算。还有其他方法吗?

c file position eof file-pointer
3个回答
1
投票

不,你不能。FILE结构不知道文件有多长,因此没有找到此距离的简便方法。该文件被视为一条道路-您变成道路,然后沿着道路行驶,当道路结束时,您会发现。但是没有迹象表明这条路有多长。

您可以使用stat或类似名称分别询问操作系统。但是请注意,FILE甚至并不总是引用具有定义结尾的文件-它可能是stdin来自管道,并且大小当时完全未知。


0
投票

当您首次打开文件时,可以使用fseek()转到文件的末尾(但请参见下面的注释),然后使用fseek()获取位置并将其保存(作为文件的大小)。然后调用ftell()返回到开头。

然后,可以从保存的'大小'中减去以后调用rewind()的返回值,以获取从当前位置到文件末尾的偏移量(距离):

ftell()

但是请注意,从上方链接到ftell()的cppreference页面上,实现// Given a FILE* fp that;s just been opened: fseek(fp, SEEK_END, 0); long int endptr = ftell(fp); rewind(fp); // Or you can use fseek(fp, SEEK_SET, 0); //... // Later in your code: long int dtoend = endptr - ftell(pf); 的实现是不是必需的]:

  • 不允许库实现有意义地支持SEEK_END(因此,使用库实现的代码没有真正的标准可移植性。

0
投票

您可以使用SEEK_END获取文件的当前位置,使用fseek查找末尾,然后再次使用ftell()获取文件末尾的偏移量(或大小)。

© www.soinside.com 2019 - 2024. All rights reserved.