使用Go获取可用磁盘空间量
基本上,我需要输出df -h
,其中包括可用空间和卷的总大小。该解决方案需要在Windows,Linux和Mac上运行并使用Go编写。
我浏览了os
和syscall
Go文档,但没有发现任何东西。在Windows上,即使命令行实用程序也很笨拙(dir
C:\)或需要提升的特权(fsutil volume diskfree C:\
)。当然有一种方法我还没有发现…
更新:
根据nemo的回答和邀请,我提供了一个跨平台的Go软件包来执行此操作。
回答:
在POSIX系统上,可以使用syscall.Statfs
。
以当前工作目录的字节为单位打印可用空间的示例:
import "syscall"import "os"
var stat syscall.Statfs_t
wd, err := os.Getwd()
syscall.Statfs(wd, &stat)
// Available blocks * size per block = available space in bytes
fmt.Println(stat.Bavail * uint64(stat.Bsize))
对于Windows,您还需要执行syscall路由。示例(来源):
h := syscall.MustLoadDLL("kernel32.dll")c := h.MustFindProc("GetDiskFreeSpaceExW")
var freeBytes int64
_, _, err := c.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(wd))),
uintptr(unsafe.Pointer(&freeBytes)), nil, nil)
随意编写一个提供跨平台功能的软件包。有关如何实现跨平台的内容,请参见构建工具帮助页面。
以上是 使用Go获取可用磁盘空间量 的全部内容, 来源链接: utcz.com/qa/421378.html