linux獲取檔案大小
阿新 • • 發佈:2019-01-07
摘自: http://os.51cto.com/art/200912/168700.html
在我們學習生活中經常會遇到問題和困難,就比如說我們在學習Linux時,比如怎樣Linux獲取檔案大小的方法。前幾天在工作中需要寫一段程式碼,獲取一些視訊檔案的大小,心想:這還不簡單嗎?直接用標準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函式可以正確的得到超大檔案的狀態資訊(當然包括檔案大小),於是最終實現瞭如下的程式碼:
- unsigned long get_file_size(const char *filename)
- {
- struct stat buf;
- if(stat(filename, &buf)<0)
- {
- return 0;
- }
- return (unsigned long)buf.st_size;
- }