关于获得文件超过2G,超过4G文件大小的方法

获得文件属性(大小等)的函数有stat/fstat/lstat,头文件为:

#include<sys/types.h>
#include<sys/stat.h>

int stat(const char *restrict pathname, struct stat *restrict buf);
提供文件名字,获取文件对应属性。
int fstat(int filedes, struct stat *buf);
通过文件描述符获取文件对应的属性。文件打开后这样操作
int lstat(const char *restrict pathname, struct stat *restrict buf);
连接文件
对于一般的文件(小于2G),用int类型来表示返回的文件大小(st_size),当文件超过2G,就会出现问题,首先类型由int变成unsigned int /long(可以表示小于4G的文件)或long long(超过4G的文件)。这样编译后 ,还是不能正确得到文件大小,我的解决方法是在编译的时候用gcc  -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE 源文件,同时运用这两个解决方案,就可以获取大文件的文件属性了。

unsigned long get_filesize(const char *filename)

  3 {
  4     struct stat buf;
  5     if((stat(filename,&buf))<0)
  6     {
  7        fprintf(stderr,"EACCES:%s\n",strerror(EACCES));
  8        errno=ENOENT;
  9        perror(filename);
 10        return 0;
 11     }
 12     return (usigned long)buf.st_size;

 13 }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值