C 如何使用fgetpos()获取文件的大小

C 如何使用fgetpos()获取文件的大小,c,gcc,C,Gcc,如何使用fgetpos()获取文件大小?我实际上想显示一个大文件的文件大小(3-10GB)试试看 FILE * fp = fopen(filename, "r"); // seek to the end fseek(fp, 0, SEEK_END); fpos_t flesize; // get current position fgetpos(fp, &flesize); 我宁愿推荐fstat,不过: struct stat file_stat; fstat(fileno(fp)

如何使用
fgetpos()
获取文件大小?我实际上想显示一个大文件的文件大小(3-10GB)

试试看

FILE * fp = fopen(filename, "r");

// seek to the end
fseek(fp, 0, SEEK_END);

fpos_t flesize;
// get current position
fgetpos(fp, &flesize);
我宁愿推荐
fstat
,不过:

struct stat file_stat;
fstat(fileno(fp), &file_stat);

printf("File size : %zd bytes\n", file_stat.st_size);
使用fgetpos(),文件指针必须遍历整个文件(3-10 GB)!!通过简单的系统调用stat/fstat,可以通过结构成员st_size获得大小。

使用
fstat()


您不想使用
fstat
的任何特殊原因?请参见中的“fgetpos”。我同意您的看法
fstat
是一个更好的函数。标准严格规定
fgetpos
的返回值必须严格用于
fsetpos
fseek()
SEEK\u END
不是一种便携的处理方式。
%d
打印
int
,它很可能默认为32位整数,因此无法捕捉
off\u t
的全部美,而
s.st\u size
恰好是。
File *fd = fopen("filename");
struct stat s;
fstat(fileno(fd), &s);
printf("file size: %lu\n", s.st_size);