Linux编程:获取文件大小
来源:互联网 发布:软件造价评估公司 编辑:程序博客网 时间:2024/06/08 16:29
在我们学习生活中经常会遇到问题和困难,就比如说我们在学习Linux时,比如怎样Linux获取文件大小的方法。前几天在工作中需要写一段代码,获取一些视频文件的大小,心想:这还不简单吗?直接用标准C的文件操作函数就OK了。于是写了下面的一段代码来实现:
unsignedlongget_file_size(constchar *filename) { unsignedlongsize; FILE* fp = fopen( filename, "rb"); if(fp==NULL) { printf("ERROR: Open file %s failed.\n", filename); return0; } fseek( fp, SEEK_SET, SEEK_END ); size=ftell(fp); fclose(fp); returnsize; }
没有想到的是,在程序执行后发现有的文件能正确的获取大小,而有的文件则不能正确的获取到文件大小,检查了代码,也没有发现有什么不对的地方。但是在这过程中发现了一个问题,就是能正确获取大小的文件都是相对比较小的文件,而出现错误的都是很大的文件。于是想到会不会是因为标准 C文件操作函数对超过一定大小的文件不支持所造成的呢,于是Google了一下,没想到猜测是正确的,标准C的文件操作函数不支持对超过2G的文件读取。
问题找到了,看来只有换一种方法来实现了,因为平时很少用到标准C的一些函数,所以,又只有求助于Google了,在看了网上不少的参考文章之后,发现调用stat函数可以正确的得到超大文件的状态信息(当然包括文件大小),于是最终实现了如下的代码:
unsignedlong get_file_size(constchar*filename) { structstat buf; if(stat(filename, &buf)<0) { return0; } return(unsignedlong)buf.st_size; }
其实,本质是通过接口获取系统中保存的文件信息结点:
All of these system calls return a stat structure, which contains the following fields:man 2 stat:
structstat { 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 file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ };
转自:http://my.oschina.net/mavericsoung/blog/138769
0 0
- Linux编程:获取文件大小
- linux 获取文件大小
- linux获取文件大小[c]
- linux获取文件大小
- linux获取文件大小
- linux 下面获取文件大小
- linux下获取文件大小
- LINUX C获取文件大小
- linux获取文件大小例子
- LINUX C获取文件大小
- LINUX C获取文件大小
- linux c获取文件大小
- linux c 获取文件大小
- linux下获取文件大小总结
- Linux 获取文件大小--C函数
- Linux Shell脚本获取文件大小
- linux c 下获取文件大小
- linux c 下获取文件大小
- Java——反射机制实例
- SQL中的cast()函数介绍
- 一起做RGB-D SLAM (3)
- QProcess的问题
- 设置透明的导航栏
- Linux编程:获取文件大小
- 基于Netty5.0案例八服务端心跳包
- Maven生命周期详解
- 一起做RGB-D SLAM (4)
- web.xml配置详解
- JBoss7.1配置Oracle11g数据源,详细图解
- Redis KVStore 在阿里云环境下的性能报告及问题
- [IOS 开发] 利用UIWebView 加载GIF动画
- 详解Spring Data JPA