引言
有一天看見看到返回檔案長度**返回值都是long,就感覺怪怪的, 一般32位long最大也就2g.
而大檔案太多了, 乙個dota2安裝包估計都得10多g吧. 一般c得到檔案長度**
/*如上套路, 比較耿直的. 寫個測試*** 得到檔案長度, 一種通用老的寫法
* path : 檔案路徑
* : 返回檔案長度 */
long
file_getsize(
const
char *path)
#include /*執行正常的測試結果看下圖* 得到檔案長度, 一種通用老的寫法
* path : 檔案路徑
* : 返回檔案長度 */
long file_getsize(const
char *path);
int main(int argc, char *argv)
return0;
}
扯一點, 對於 fopen "rb"後面b表示採用二進位製流方式處理, 預設是t文字模式. 前者速度快一點, 後者做了一些特殊處理.
主要是不同系統對換行符處理不同業務誕生的. 推薦用 b 二進位制處理方式更快些.(21世紀是個裝b的年代, 全是bbb)前言
這裡我們再做乙個實驗 , 看下面大檔案 . 繼續用上面**測試一下. 先看測試檔案
測試結果如下
這時候我們需要用新的檔案操作**,想辦法了. 其實上面ftell方式得到**, 來回移動檔案指標效能很低.
因為檔案大小作業系統知道, 直接問它要是最快的. 先在window 上寫一段**
#include #include上面就是完整的測試**, 主要通過 sys/stat.h 下面_stat64 函式得到 8位元組長度的檔案大小表示.#include
#include
/** 得到檔案長度, windows 品台用法
* path : 檔案路徑
* : 返回檔案長度 */
int64_t file_getsize(
const
char *path);
int main(int argc, char *argv)
return0;
}/** 得到檔案長度, windows 上適用方法
* path : 檔案路徑
* : 返回檔案長度 */
int64_t
file_getsize(
const
char *path) ;
if (!path || !*path)
return0;
_stat64(path, &info);
return
info.st_size;
}
我們也繼續測試一下. 結果很滿意
到這裡我們. 在window上測試完畢.正文
我們在linux上測試一下. 先看**我寫好的** main_linux.c
#include #include編譯命令#include
#include
/** 得到檔案長度, linuxs 平台用法
* path : 檔案路徑
* : 返回檔案長度 */
int64_t file_getsize(
const
char *path);
int main(int argc, char *argv)
return0;
}/** 得到檔案長度, linux 上適用方法
* path : 檔案路徑
* : 返回檔案長度 */
int64_t
file_getsize(
const
char *path) ;
if (!path || !*path)
return0;
stat(path, &info);
return
info.st_size;
}
gcc -wall -ggdb2 -o main_linux.out main_linux.c後面檢視 sys/stat.c 原始碼
有興趣可以看看, 得到的結論是, linux會根據平台自動幫我們確定是 stat64 還是 stat. 我用的是64位的, 預設stat也是stat64.
返回的long 是 8位元組. 可以看下面結果
這裡也解決了乙個問題, 一般 off_t 結構是8位元組的unsigned long 結構. window是long long結構. 不同平台實現不一樣.
如果希望這個函式是跨平台的 那麼 需要在 window 上做
#if defined(_msc_ver)# define stat _stat64
#endif
PHP中如何得到陣列的長度
獲取一維陣列 count 和sizeof 都可以直接統計一維陣列長度。示例如下 arr array 0 1 2 3 4 5 6 7 8 9 echo count arr 輸出10 arr array 蘋果 香蕉 桔子 西瓜 梨 葡萄 echo sizeof arr 輸出6 獲取二維陣列長度 coun...
PHP中如何得到陣列的長度
count 和sizeof 都可以直接統計一維陣列長度。示例如下 arr array 0 1 2 3 4 5 6 7 8 9 echo count arr 輸出10 arr array 蘋果 香蕉 桔子 西瓜 梨 葡萄 echo sizeof arr 輸出6 count 函式有兩個引數 count ...
C C 如何得到檔案的大小
c 如何得到檔案的大小 先用fopen開啟檔案,然後把檔案指標指向檔案尾.再用ftell獲得檔案指標當前位置 即檔案長度 源 include stdafx.h include include using namespace std int main fseek fp,0,seek end 定位到檔案...