基本上,我希望输出为df -h
,其中既包括可用空间,也包括卷的总大小.该解决方案需要在Windows、Linux和Mac上运行,并使用Go编写.
我已经翻阅了os
和syscall
围棋的文档,但没有找到任何东西.在Windows上,即使是命令行实用程序也不是很笨拙(dir C:\
),就是需要提升权限(fsutil volume diskfree C:\
).当然有一种方法可以做到这一点,但我还没有找到……
更新:
基本上,我希望输出为df -h
,其中既包括可用空间,也包括卷的总大小.该解决方案需要在Windows、Linux和Mac上运行,并使用Go编写.
我已经翻阅了os
和syscall
围棋的文档,但没有找到任何东西.在Windows上,即使是命令行实用程序也不是很笨拙(dir C:\
),就是需要提升权限(fsutil volume diskfree C:\
).当然有一种方法可以做到这一点,但我还没有找到……
更新:
On POSIX systems you can use sys.unix.Statfs
.
Example of printing free space in bytes of current working directory:
import "golang.org/x/sys/unix"
import "os"
var stat unix.Statfs_t
wd, err := os.Getwd()
unix.Statfs(wd, &stat)
// Available blocks * size per block = available space in bytes
fmt.Println(stat.Bavail * uint64(stat.Bsize))
对于Windows,您也需要使用syscall路由.示例(source,更新为匹配new sys/windows
package):
import "golang.org/x/sys/windows"
h := windows.MustLoadDLL("kernel32.dll")
c := h.MustFindProc("GetDiskFreeSpaceExW")
var freeBytes int64
_, _, err := c.Call(uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(wd))),
uintptr(unsafe.Pointer(&freeBytes)), nil, nil)
可以编写一个跨平台提供功能的包.