?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
用C语言获取文g长度的常见思\是:
打开文g后用 fseek() 函数把文件位|指针移动到文g的末,?ftell() 获得q时位置指针距文件头的字节数Q这个字节数是文g的长度。但是这样做也会受到下面的限Ӟftell() 函数的返回值是 long cdQ在Windows 下(不管?32 位还?64 位)Qlong cd变量的长度都?4 字节Q这栯正常获取到的文g长度必须于 2GB?/p>
微Y?Visual Studio 2005 及以后版本的开发工具中Q在 stdio.h 中提供了函数 _fseeki64() ?_ftelli64()。_fseeki64() 函数中表C文件指针偏U量的变量是 __int64 cdQ_ftelli64() 的返回g?__int64 cdQ因此可以用q两个函数获取大文gQ指过 2GBQ的长度?/p>
注意 Linux ?Unix 中的 C ~译器没有提?_fseeki64() ?_ftelli64() 函数Q但是在 stdio.h 中提供了 fseeko() ?ftello() 函数Qfseeko() 函数中表C文件指针的偏移量的变量?off_t cdQftello() 的返回g是off_t cdQoff_t cd的长度有可能?32 比特?64 比特Q用宏定义 #define _FILE_OFFSET_BITS 64 可以?off_t 设ؓ64 比特ѝ?/strong>
下面l出用C语言获取文g长度Q可能大?2GBQ的实现CZQ代码在 Windows ?Linux q_上都能用(未在 Unix 上测试)Q?/p>
[cpp]
/**************************************************
* File name: get_file_size.h
* Author: HAN Wei
* Author's blog: http://blog.csdn.net/henter/
* Date: Oct 31th, 2013
* Description: declare function GetFileSize() which
can be used on platform Windows or Linux
**************************************************/
#ifndef GET_SMALL_FILE_SIZE_H
#define GET_SMALL_FILE_SIZE_H
#ifdef __cplusplus
extern "C" {
#endif
/**************************************************
*函数名称QGetFileSize
*功能: 获取文g的大,l果以字节ؓ单位
*参数:
file_name[in] 文g?nbsp;
file_byte_size[in] 文g大小
*q回?
0 成功
-1 p|
*备注Q?nbsp;
1. 如果q行在Windows操作pȝ上,声明的函数只能在 Visual
Studio 2005 及更高版本上~译?nbsp;
2. 该函数对实际文g大小没有限制
**************************************************/
int GetFileSize(char *file_name, long long *file_byte_size);
#ifdef __cplusplus
}
#endif
#endif /* end of GET_SMALL_FILE_SIZE_H */