2009-09-19 50 views

回答

8

GetDiskFreeSpaceEx WIN32 API

+1

更多幫助請參閱:http://www.codeproject.com/KB/system/system_information.aspx – lsalamon 2009-09-19 18:02:27

8
#include <sys/statvfs.h> 
#include <iostream> 
#include <cstring> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    struct statvfs fiData; 

    if(argc < 2) { 
      cout <<"Usage, ./size dir1 dir2 ... dirN\n"; 
      return(1); 
    } 

    //Lets loopyloop through the argvs 
    for(int i= 1 ; i<argc; i++) { 
      if((statvfs(argv[i],&fiData)) < 0) { 
        cout << "\nFailed to stat:" << argv[i]; 
      } else { 
        cout << "\nDisk: " << argv[i]; 
        cout << "\nBlock size: "<< fiData.f_bsize; 
        cout << "\nTotal no blocks: "<< fiData.f_blocks; 
        cout << "\nFree blocks: "<< fiData.f_bfree; 
      } 
    } 
} 

彙編:克++ -o大小file.cpp

測試: ./size DIR1 DIR2

+0

針對'fiData.f_bfree'使用'fiData.f_bavail'作爲可用於非特權進程的空閒塊的數量。這將有助於計算更準確的可用磁盤。 – 2015-12-30 10:21:45

1

原始版本的Linux的statfs()和fstatfs ()系統調用並沒有考慮到極大的文件大小。隨後,Linux 2.6添加了使用新結構statfs64的新statfs64()和fstatfs64()系統調用。新結構包含與原始statfs結構相同的字段,但各個字段的大小都會增加,以適應大文件大小。 見http://linux.die.net/man/2/statfs64