Linux下C语⾔获取⽂件⼤⼩
Linux 下C语⾔获取⽂件⼤⼩
C语⾔是⼀种⽐较底层的语⾔,有时在其他语⾔中很容易操作的事情,在c语⾔中就⽐较⿇烦,例如获取⼀个⽂件的⼤⼩。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语⾔中却没有直接对应的函数获取⽂件⼤⼩。
⽬前,⽹上有⼀种流传很⼴的⽅法,读取⽂件到内存,然后跳转到⽂件末尾,查看跳转的长度。代码如下:
int file_size(char* filename)
{
FILE *fp=fopen(filename,"r");
if(!fp) return -1;
fseek(fp,0L,SEEK_END);
int size=ftell(fp);
fclose(fp);
return size;
linux怎么读取windows文件}
上述⽅法利⽤fseek移动⼀个⽂件的存取位置到⽂件的末尾,然后利⽤ftell获得⽬前的⽂件访问位置。这种⽅法可以认为是⼀种间接的获取⽅式。虽说可以获得⽂件⼤⼩,但是有两个缺点。⾸先,ftell的返回值为long,在不同环境下占⽤的字节数也不同,这就可能存在long是四个字节的情况。此时,获取的⽂件⼤⼩就不能超过2G,否则就会出错。
但是,上述缺点在⼤多数情况下都没问题,超⼤⽂件还可以通过fsetpos和fgetpos获取⽂件⼤⼩。最致命的缺陷就是它需要加载⽂件到内存,然后跳转到⽂件末尾,这个操作⾮常耗时!可能在读取少量⽂件时体现不出,但是当⽂件达到上万个时,速度就会慢的要命,这种⽅法相当于把所有的⽂件都读到内存中⼀遍!
如果可能,尽量避免采⽤上述间接的⽅式获取⽂件⼤⼩。在Linux下,还有⼀种更简单的⽅式,通过读取⽂件信息获得⽂件⼤⼩,速度也快很多。代码如下:
#include <sys/stat.h>
int file_size2(char* filename)
{
struct stat statbuf;
stat(filename,&statbuf);
int size=statbuf.st_size;
return size;
}
这种⽅式⾸先获得相关⽂件的状态信息,然后从状态信息中读取⼤⼩信息。由于没有读取⽂件的操作,所以操作速度⾮常快。强烈建议⼤家在linux下使⽤这种⽅式。Windows平台下肯定也有类似的函数读取⽂件信息,不过本⼈常年不在windows下编程,所以在此不做介绍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论