教会你Linux获取文件大小方法

系统 Linux
在我们学习生活中经常会遇到问题和困难,就比如说我们在学习Linux时,比如怎样Linux获取文件大小的方法。前几天在工作中需要写一段代码,获取一些视频文件的大小,心想:这还不简单吗?直接用标准C的文件操作函数就OK了。

在我们学习生活中经常会遇到问题和困难,就比如说我们在学习Linux时,比如怎样Linux获取文件大小的方法。前几天在工作中需要写一段代码,获取一些视频文件的大小,心想:这还不简单吗?直接用标准C的文件操作函数就OK了。于是写了下面的一段代码来实现:

  1. unsigned long get_file_size(const char *filename)  
  2. {  
  3.     unsigned long size;  
  4.     FILE* fp = fopen( filename, "rb" );  
  5.     if(fp==NULL)  
  6.     {  
  7.         printf("ERROR: Open file %s failed.\n", filename);  
  8.         return 0;  
  9.     }  
  10.     fseek( fp, SEEK_SET, SEEK_END );  
  11.     size=ftell(fp);  
  12.     fclose(fp);  
  13.     return size;  

没有想到的是,在程序执行后发现有的文件能正确的获取大小,而有的文件则不能正确的获取到文件大小,检查了代码,也没有发现有什么不对的地方。但是在这过程中发现了一个问题,就是能正确获取大小的文件都是相对比较小的文件,而出现错误的都是很大的文件。于是想到会不会是因为标准 C文件操作函数对超过一定大小的文件不支持所造成的呢,于是Google了一下,没想到猜测是正确的,标准C的文件操作函数不支持对超过2G的文件读取。

问题找到了,看来只有换一种方法来实现了,因为平时很少用到标准C的一些函数,所以,又只有求助于Google了,在看了网上不少的参考文章之后,发现调用stat函数可以正确的得到超大文件的状态信息(当然包括文件大小),于是最终实现了如下的代码:

  1. unsigned long get_file_size(const char *filename)  
  2. {  
  3.     struct stat buf;  
  4.     if(stat(filename, &buf)<0)  
  5.     {  
  6.         return 0;  
  7.     }  
  8.     return (unsigned long)buf.st_size;  

 从写这么一个小小功能的函数可以看出,平时多积累一些计算机方面的知识真的是很重要的,同时对代码的全面测试也是相当重要的,否则,看着很正确的代码可能在某些情况下会给你带来意想不到的麻烦。 这样你就能学会Linux获取文件大小的方法了。              

【编辑推荐】

  1. 掌握操作技巧 玩转Linux桌面操作系统
  2. 各种各样的Linux来自Linux个人开发者
  3. 伦敦证券启用Linux操作系统平台
  4. Linux基金会大动作
  5. Linux操作系统:普通用户安全执行管理员程序
责任编辑:小霞 来源: 清华大学出版社
相关推荐

2009-12-09 14:56:54

Linux查看目录文件

2009-12-15 14:29:04

2009-06-26 10:05:10

获取文件大小

2010-02-02 10:46:51

C++获取文件大小

2009-12-25 17:35:39

Linux安装real

2009-12-14 18:04:38

Linux命令创建快照

2010-05-27 16:58:11

Linux查看文件大小

2010-05-24 10:16:40

SWaP分区

2009-12-21 14:13:04

重复行uniq

2009-12-15 17:10:39

优化Linux

2020-07-22 07:45:00

JavaScript开发技术

2019-07-31 08:55:01

LinuxUbuntu技术

2010-10-29 15:26:29

Oracle日志文件

2011-04-02 16:38:49

Cactirrd

2009-12-17 13:40:42

Linux网卡安装

2009-12-10 10:40:21

Linux ldd

2011-03-31 15:23:39

Cactirrd

2010-07-12 13:57:55

SQL Server

2009-12-10 10:18:44

Apache安装

2009-12-03 17:50:04

Linux Samba
点赞
收藏

51CTO技术栈公众号