windows - 如何在Windows中获取驱动器的总大小

标签 windows go

我想使用标准的Windows API调用在Windows上的Go中获取驱动器的总大小;

我找到this来获取可用空间。

现在我想以特殊驱动器的总空间大小为例

C:\

最佳答案

您链接的问题和答案显示了如何获得可用空间。该解决方案使用GetDiskFreeSpaceExW()中的 kernel32.dll Windows API函数来获取它。

同样的功能也可以用来获取总大小。 GetDiskFreeSpaceExW()函数的签名:

BOOL GetDiskFreeSpaceExW(
  LPCWSTR         lpDirectoryName,
  PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  PULARGE_INTEGER lpTotalNumberOfBytes,
  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

它具有一个输入参数,路径,并且具有3个输出参数,即空闲字节(可供调用者使用),总字节(磁盘大小)和总空闲字节。

因此,只需在调用它时,为要从中获取的所有信息提供变量(指针)。

例如:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")

var free, total, avail int64

path := "c:\\"
r1, r2, lastErr := GetDiskFreeSpaceExW.Call(
    uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
    uintptr(unsafe.Pointer(&free)),
    uintptr(unsafe.Pointer(&total)),
    uintptr(unsafe.Pointer(&avail)),
)

fmt.Println(r1, r2, lastErr)
fmt.Println("Free:", free, "Total:", total, "Available:", avail)

运行它,输出示例:
1 0 Success.
Free: 16795295744 Total: 145545281536 Available: 16795295744

关于windows - 如何在Windows中获取驱动器的总大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62787488/

相关文章:

authentication - Web应用登录系统

映射并发访问

go - 如何在 "pretty"文本中查看mgo的bson.Raw

c++ - 等待单个对象崩溃

java - 如何在 ScrolledComposite 中显示多行文本?

windows - 使用 Ansible 关闭 SMB 1.0/CIFS 文件共享支持?

windows - 通过主机文件阻止网站不起作用?

php - 我无法在 symfony2 中创建包

go - 我如何确保我的消费者按顺序处理 kafka 主题中的消息,并且只处理一次?

go - 一个基本的 Golang 流( channel )死锁