总结C/C++下读取文件大小的方法

C下:

1、依靠定位文件位置从而获得文件大小。

int GetFileSize(char *filename)  
{  
	int  size = 0;  
	FILE  *fp = fopen(filename, "rb");  
	
	if (fp) 
	{  
		fseek(fp, 0, SEEK_END);  
		size = ftell(fp);  
		fclose(fp);  
	}

	return size;
} 

 

int GetFileSize(char *filename)
{
	int size = 0;
	FILE *fp = fopen(filename, "rb");

	if (NULL != fp)
	{
		size = filelength(fileno(fp));
	}
	
	return size;
}



 

2、直接读取文件属性得知文件大小。

 

int GetFileSize(char *filename)
{
	struct _stat buf;
	int result = -1;
	int size = 0;

	result = _stat( filename, &buf );
	if( result != 0 )
	{
		perror( "Problem getting information" );
	}
	else
	{
		size = buf.st_size;
	}

	return size;
}


注:stat 结构定义于:/include/sys/stat.h 文件中,因此需要包含该文件,stat结构体定义如下

struct stat: 
mode_t st_mode; //文件对应的模式,文件,目录等 
ino_t st_ino; //i-node节点号 
dev_t st_dev; //设备号码 
dev_t st_rdev; //特殊设备号码 
nlink_t st_nlink; //文件的连接数 
uid_t st_uid; //文件所有者 
gid_t st_gid; //文件所有者对应的组 
off_t st_size; //普通文件,对应的文件字节数 
time_t st_atime; //文件最后被访问的时间 
time_t st_mtime; //文件内容最后被修改的时间 
time_t st_ctime; //文件状态(属性)改变时间 
blksize_t st_blksize; //文件内容对应的块大小 
blkcnt_t st_blocks; //文件内容对应的块数量


C++

利用Windows API或者MFC,得到文件大小。

1、利用MFC的CFile类

int GetFileSize(char *filename)
{
	bool iOpen = false;
	int size = 0;
	CFile cFile;
	
	iOpen = cFile.Open(filename, CFile::modeRead);
	if (iOpen)
	{
		size = cFile.GetLength();
	}	
	
	return size;
}


2、利用windows API函数

int GetFileSize(char *filename)
{
	int size = 0;
	HANDLE handle = CreateFile(filename, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
	if(handle != INVALID_HANDLE_VALUE)
	{
		size = GetFileSize(handle, NULL);
		CloseHandle(handle);
	} 

	return size;
}



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值