| 網(wǎng)站首頁(yè) | 關(guān)于我們 | 開(kāi)發(fā)優(yōu)勢(shì) | 產(chǎn)品展示 |
| 合作企業(yè) | 新聞動(dòng)態(tài) | 聯(lián)系我們 | 電話聯(lián)系 |
文章作者:濟(jì)南軟件開(kāi)發(fā) 時(shí)間:2016年12月20日
用C語(yǔ)言獲取文件長(zhǎng)度的常見(jiàn)思路是:
打開(kāi)文件后用 fseek() 函數(shù)把文件位置指針移動(dòng)到文件的末尾,用 ftell() 獲得這時(shí)位置指針距文件頭的字節(jié)數(shù),這個(gè)字節(jié)數(shù)就是文件的長(zhǎng)度。但是這樣做也會(huì)受到下面的限制:ftell() 函數(shù)的返回值是 long 類(lèi)型,在Windows 下(不管是 32 位還是 64 位),long 類(lèi)型變量的長(zhǎng)度都是 4 字節(jié),這樣能正常獲取到的文件長(zhǎng)度必須小于 2GB。
微軟在 Visual Studio 2005 及以后版本的開(kāi)發(fā)工具中,在 stdio.h 中提供了函數(shù) _fseeki64() 和 _ftelli64()。_fseeki64() 函數(shù)中表示文件指針偏移量的變量是 __int64 類(lèi)型,_ftelli64() 的返回值也是 __int64 類(lèi)型,因此可以用這兩個(gè)函數(shù)獲取大文件(指超過(guò) 2GB)的長(zhǎng)度。
注意 Linux 和 Unix 中的 C 編譯器沒(méi)有提供 _fseeki64() 和 _ftelli64() 函數(shù),但是在 stdio.h 中提供了 fseeko() 和 ftello() 函數(shù),fseeko() 函數(shù)中表示文件指針的偏移量的變量是 off_t 類(lèi)型,ftello() 的返回值也是off_t 類(lèi)型,off_t 類(lèi)型的長(zhǎng)度有可能是 32 比特或 64 比特,使用宏定義 #define _FILE_OFFSET_BITS 64 可以將 off_t 設(shè)為64 比特長(zhǎng)。
下面給出用C語(yǔ)言獲取文件長(zhǎng)度(可能大于 2GB)的實(shí)現(xiàn)示例,代碼在 Windows 和 Linux 平臺(tái)上都能使用(未在 Unix 上測(cè)試):
[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
/**************************************************
*函數(shù)名稱:GetFileSize
*功能: 獲取文件的大小,結(jié)果以字節(jié)為單位
*參數(shù):
file_name[in] 文件名
file_byte_size[in] 文件大小
*返回值:
0 成功
-1 失敗
*備注:
1. 如果運(yùn)行在Windows操作系統(tǒng)上,聲明的函數(shù)只能在 Visual
Studio 2005 及更高版本上編譯。
2. 該函數(shù)對(duì)實(shí)際文件大小沒(méi)有限制
**************************************************/
int GetFileSize(char *file_name, long long *file_byte_size);
#ifdef __cplusplus
}
#endif
#endif /* end of GET_SMALL_FILE_SIZE_H */
想要了解更多詳情歡迎來(lái)電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。