用C语言获取任意文件的长度(可能大于2GB)#define _FILE_OFFSET_BITS 64

打开文件后用 fseek() 函数把文件位置指针移动到文件的末尾,用 ftell() 获得这时位置指针距文件头的字节数,这个字节数就是文件的长度。但是这样做也会受到下面的限制:ftell() 函数的返回值是 long 类型,在Windows 下(不管是 32 位还是 64 位),long 类型变量的长度都是 4 字节,这样能正常获取到的文件长度必须小于 2GB.

  微软在 Visual Studio 2005 及以后版本的开发工具中,在 stdio.h 中提供了函数 _fseeki64() 和 _ftelli64()。_fseeki64() 函数中表示文件指针偏移量的变量是 __int64 类型,_ftelli64() 的返回值也是 __int64 类型,因此可以用这两个函数获取大文件(指超过 2GB)的长度。

  注意 Linux 和 Unix 中的 C 编译器没有提供 _fseeki64() 和 _ftelli64() 函数,但是在 stdio.h 中提供了 fseeko() 和 ftello() 函数,fseeko() 函数中表示文件指针的偏移量的变量是 off_t 类型,ftello() 的返回值也是off_t 类型,off_t 类型的长度有可能是 32 比特或 64 比特,使用宏定义 #define _FILE_OFFSET_BITS 64 可以将 off_t 设为64 比特长。

  下面给出用C语言获取文件长度(可能大于 2GB)的实现示例,代码在 Windows 和 Linux 平台上都能使用(未在 Unix 上测试),包括三个文件:

http://itlab.idcquan.com/c/skill/943552.html

 

转载于:https://www.cnblogs.com/thrillerz/p/5000186.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值