如何得到檔案長度

2021-07-15 03:05:40 字數 2998 閱讀 6085

引言

有一天看見看到返回檔案長度**返回值都是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 

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

}

上面就是完整的測試**, 主要通過 sys/stat.h 下面_stat64 函式得到 8位元組長度的檔案大小表示.

我們也繼續測試一下.  結果很滿意

到這裡我們. 在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 定位到檔案...