linux 擷取檔案大小

來源:互聯網
上載者:User

摘自:  http://os.51cto.com/art/200912/168700.html 

在我們學習生活中經常會遇到問題和困難,就比如說我們在學習Linux時,比如怎樣Linux擷取檔案大小的方法。前幾天在工作中需要寫一段代碼,擷取一些視頻檔案的大小,心想:這還不簡單嗎?直接用標準C的檔案操作函數就OK了。於是寫了下面的一段代碼來實現:

 
  1. unsigned long get_file_size(const char *filename)  
  2. {  
  3.     unsigned long size;  
  4.     FILE* fp = fopen( filename, "rb" );  
  5.     if(fp==NULL)  
  6.     {  
  7.         printf("ERROR: Open file %s failed.\n", filename);  
  8.         return 0;  
  9.     }  
  10.     fseek( fp, SEEK_SET, SEEK_END );  
  11.     size=ftell(fp);  
  12.     fclose(fp);  
  13.     return size;  

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

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

 
  1. unsigned long get_file_size(const char *filename)  
  2. {  
  3.     struct stat buf;  
  4.     if(stat(filename, &buf)<0)  
  5.     {  
  6.         return 0;  
  7.     }  
  8.     return (unsigned long)buf.st_size;  

 從寫這麼一個小小功能的函數可以看出,平時多積累一些電腦方面的知識真的是很重要的,同時對代碼的全面測試也是相當重要的,否則,看著很正確的代碼可能在某些情況下會給你帶來意想不到的麻煩。 這樣你就能學會Linux擷取檔案大小的方法了。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.