建议linux下使用stat()获取文件大小

来源:互联网 发布:手机迅雷网络异常 编辑:程序博客网 时间:2024/06/08 04:03

linux下的stat函数是专门用来获取文件状态的API,需要一个结构体struct  stat

定义如下:

 struct stat {               dev_t     st_dev;         /* ID of device containing file */               ino_t     st_ino;         /* inode number */               mode_t    st_mode;        /* protection */               nlink_t   st_nlink;       /* number of hard links */               uid_t     st_uid;         /* user ID of owner */               gid_t     st_gid;         /* group ID of owner */               dev_t     st_rdev;        /* device ID (if special file) */               off_t     st_size;        /* total size, in bytes */               blksize_t st_blksize;     /* blocksize for filesystem I/O */               blkcnt_t  st_blocks;      /* number of 512B blocks allocated */             }
其中st_size是文件大小,类型是off_t,其实就是long,在64位机下是8位,可以表示文件大小为2^63-1B,换算成G是8589934592GB,比1TB的硬盘都要大(在32位机下long是4位,最大能表示2G的文件,如果在32位机获取大于2G文件的大小,就很难处理)

stat函数需要2个参数:一个是文件位置,struct stat变量用来返回文件信息;返回值-1失败,0成功

#include <stdio.h>#include <sys/stat.h>int main(int argc, char *argv[]){struct stat statbuff;if( -1==stat("./Ubuntu-16.04.2.vdi", &statbuff) ){printf("stat wrong\n");}else{printf("stat success.%ld\n", statbuff.st_size);}}
6.3G的文件,结果如下图;

在linux下获得文件大小还可以使用ftell函数,不过需要打开文件和移动文件指针,操作会麻烦一点。

原创粉丝点击