我在寫一個跨平臺的應用程序,我需要可用的磁盤空間。對於posix系統(Linux和Macos),我使用statvfs。我創建了這個C++方法:如何獲取Posix系統中的可用磁盤空間總量?
long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) {
struct statvfs buf;
if (!statvfs(absoluteFilePath, &buf)) {
unsigned long blksize, blocks, freeblks, disk_size, used, free;
blksize = buf.f_bsize;
blocks = buf.f_blocks;
freeblks = buf.f_bfree;
disk_size = blocks*blksize;
free = freeblks*blksize;
used = disk_size - free;
return free;
}
else {
return -1;
}
}
不幸的是我收到了很奇怪的值,我不明白。例如: f_blocks = 73242188 f_bsize = 1048576 f_bfree = 50393643 ...
是在比特,字節或任何其他的價值?我讀到這裏的計算器這些應該是字節,但我會得到免費的字節總數爲: f_bsize * f_bfree = 1048576 * 50393643 但這意味着49212.542GB ...太多...
上午我在代碼或其他方面做錯了什麼? 謝謝!
你使用哪個文件系統,塊大小爲1048576? – 2010-10-10 10:21:47
這是一個Mac OS擴展(區分大小寫,日誌式)。現在我正在使用mac,但據我所知,這應該是可行的。 – 2010-10-10 10:30:50
除了塊大小和所謂的70TB驅動器的奇怪之處 - 請注意,32位OSX上的「長」只有32位。即使你有正確的數字,這可能足夠大的數量的*塊*,但不夠大的數量的*字節*。驅動器大小可達4GB,可從專業供應商處獲得;-) – 2010-10-10 13:18:43