基本上,我需要输出df -h,其中包括可用空间和卷的总大小。该解决方案需要在Windows,Linux和Mac上运行并使用Go编写。
df -h
我浏览了os和syscallGo文档,但没有发现任何东西。在Windows上,即使命令行实用程序也很笨拙(dir C:\)或需要提升的特权(fsutil volume diskfree C:\)。当然有一种方法我还没有发现…
os
syscall
dir C:\
fsutil volume diskfree C:\
更新: 根据nemo的回答和邀请,我提供了一个跨平台的Go软件包来执行此操作。
在POSIX系统上,可以使用syscall.Statfs。 以当前工作目录的字节为单位打印可用空间的示例:
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)
随意编写一个提供跨平台功能的软件包。有关如何实现跨平台的内容,请参见构建工具帮助页面。