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;
}