D: 如何在 media/partition 上获得空闲磁盘 space?

D: How to get free disk space on media/partition?

我需要获取分区的总大小和可用大小。我怎样才能用D得到它? 我应该使用哪些功能?

它当然是特定于操作系统的。在 Linux 系统上,您需要 statfs(2) 系统调用(在 C 中)。您可能需要自己制作 C 和 D 之间的胶水代码。

在 Posix 系统(包括 Linux,但通常不包括 Windows)上,您可以使用 statvfs C 函数,它在 D 中通过 import core.sys.posix.sys.statvfs;.

一般来说,任何 Posix C 函数都在 import core.sys.posix.something 中,其中 something 与 C #cinlude 名称相同,只是换出了 / ..

无论如何,这个小程序将打印出一些关于安装在 "/":

的文件系统的信息
import core.sys.posix.sys.statvfs;
import std.stdio;

void main() {
        statvfs_t buf;

        if(statvfs("/", &buf))
                throw new Exception("failed");

        writeln(buf.f_bfree * buf.f_bsize, " free bytes");
        writeln(buf.f_blocks * buf.f_bsize, " total size in bytes");

        writeln((buf.f_bfree * buf.f_bsize) / 1024, " free KB");
        writeln((buf.f_blocks * buf.f_bsize) / 1024, " total size in KB");

        writeln(100 - (buf.f_bfree * 100 / buf.f_blocks), "% used");
}

这是一个非常简单的函数调用。在 Windows 上有所不同,但同样简单:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937%28v=vs.85%29.aspx

只需调用该函数即可。如果你需要,我也可以为此写一个例子,虽然我现在没有,因为包含它的更新 Windows headers 将在几周后的下一个 D 版本中包含,所以你现在必须extern(Windows)...但几周后你就不需要了。