获取文件大小而不读取文件

Jer*_*oen 0 c io file

有没有办法在C中获取文件的大小而不实际读取文件?我知道fseek但是因为它将'光标'设置到文件的最后,我猜这确实读取了所有文件.

我做错了这个结论吗?有办法吗?

Fre*_*Foo 5

fseek是便携式答案.在任何理智的实现中,它将读取文件的元数据而不是其内容,以确定文件的结尾,同时拒绝在没有记录此类数据的文件系统支持的流中进行搜索.

没有其他可靠的方法来获得纯ISO C中的文件大小,而不是寻找到最后然后倒回; 操作系统有特定的API来做到这一点,例如,你可以使用POSIX系统fstatfilenoFILE*获得的大小:

#include <sys/types.h>
#include <sys/stat.h>

off_t filesize(FILE *fp)
{
    // error checking omitted for clarity
    int fd = fileno(fp);
    struct stat sb;

    fstat(fd, &sb);
    return sb.st_size;
}
Run Code Online (Sandbox Code Playgroud)