主页 > 知识库 > Linux 下C语言获取文件大小

Linux 下C语言获取文件大小

热门标签:网络电话外呼系统拨号软件 贵阳400电话到哪里去办理 宿松高德地图标注 汨罗代理外呼系统 400电话申请找 天津智能外呼系统排名 申请400电话有什么用 电销机器人加盟多少钱 4层电梯外呼控制系统设计

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; 
} 

上述方法利用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下编程,所以在此不做介绍。

您可能感兴趣的文章:
  • linux下c语言的多线程编程
  • Linux下C语言的几道经典面试题小结(分享)
  • Linux 中C语言getcwd()函数的用法
  • Linux 下C语言连接mysql实例详解
  • linux C语言开发管道通信实例详解
  • linux下C语言实现写日志功能

标签:临沂 广东 海北 抚州 赣州 连云港 昌都 乌兰察布

巨人网络通讯声明:本文标题《Linux 下C语言获取文件大小》,本文关键词  Linux,下,语言,获取,文件,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Linux 下C语言获取文件大小》相关的同类信息!
  • 本页收集关于Linux 下C语言获取文件大小的相关信息资讯供网民参考!
  • 推荐文章