VC獲取文件大小的方法

VC獲取文件大小的方法(轉)  


前幾天在工作中需要寫一段代碼,獲取一些視頻文件的大小,心想:這還不簡單嗎?直接用標準C 的文件操作函數就OK了。於是寫了下面的一段代碼來實現:

unsigned long get_file_size(const char *filename)

{

unsigned long size;

FILE* fp = fopen( filename, "rb" );

if(fp==NULL)

{

printf("ERROR: Open file %s failed.\n", filename);

return 0;

}

fseek( fp, SEEK_SET, SEEK_END );

size=ftell(fp);

fclose(fp);

return size;

}

沒有想到的是,在程序執行後發現有的文件能正確的獲取大小,而有的文件則不能正確的獲取到文件大小,檢查了代碼,也沒有發現有什麼不對的地方。但是在這過程中發現了一個問題,就是能正確獲取大小的文件都是相對比較小的文件,而出現錯誤的都是很大的文件。於是想到會不會是因爲標準C文件操作函數對超過一定大小的文件不支持所造成的呢,於是Google了一下,沒想到我的猜測是正確的,標準C的文件操作函數不支持對超過2G的文件讀取。

問題找到了,看來只有換一種方法來實現了,因爲平時很少用到標準C的一些函數,所以,又只有求助於Google了,在看了網上不少的參考文章之後,發現調用stat函數可以正確的得到超大文件的狀態信息(當然包括文件大小),於是最終實現瞭如下的代碼:

#include <sys/stat.h>

unsigned long get_file_size(const char *filename)

{

struct stat buf;

if(stat(filename, &buf)<0)

{

return 0;

}

return (unsigned long)buf.st_size;

}

從寫這麼一個小小功能的函數可以看出,平時多積累一些計算機方面的知識真的是很重要的,同時對代碼的全面測試也是相當重要的,否則,看着很正確的代碼可能在某些情況下會給你帶來意想不到的麻煩。



發佈了47 篇原創文章 · 獲贊 20 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章