我在写一个跨平台的应用程序,我需要可用的磁盘空间。对于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