九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開(kāi)發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

用C語(yǔ)言獲取任意文件的長(zhǎng)度(可能大于2GB)

文章作者:濟(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)理。

泰兴市| 白水县| 昆明市| 深圳市| 色达县| 福清市| 综艺| 镇康县| 泰宁县| 肥城市| 怀来县| 信丰县| 蓬安县| 华宁县| 灌云县| 禹城市| 千阳县| 洪江市| 宿迁市| 鹰潭市| 平顶山市| 明水县| 竹山县| 红河县| 平阴县| 财经| 都江堰市| 清水县| 县级市| 磐安县| 肇州县| 昌江| 沙雅县| 莲花县| 漳州市| 保定市| 盈江县| 通化市| 乐至县| 广西| 永福县|