一尘不染

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

go

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

我浏览了ossyscallGo文档,但没有发现任何东西。在Windows上,即使命令行实用程序也很笨拙(dir C:\)或需要提升的特权(fsutil volume diskfree C:\)。当然有一种方法我还没有发现…

更新:
根据nemo的回答和邀请,我提供了一个跨平台的Go软件包来执行此操作。


阅读 606

收藏
2020-07-02

共1个答案

一尘不染

在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)

随意编写一个提供跨平台功能的软件包。有关如何实现跨平台的内容,请参见构建工具帮助页面

2020-07-02