使用Go获取可用磁盘空间量

基本上,我需要输出df -h,其中包括可用空间和卷的总大小。该解决方案需要在Windows,Linux和Mac上运行并使用Go编写。

我浏览了ossyscallGo文档,但没有发现任何东西。在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

回到顶部