登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-16 09:56:48 412浏览 收藏

从现在开始,努力学习吧!本文《使用 Go 获取可用磁盘空间量》主要讲解了golang等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

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

我浏览了osand syscallGo 文档并没有找到任何东西。在 Windows 上,即使是命令行实用程序也很笨拙 ( dir C:\) 或需要提升权限 ( fsutil volume diskfree C:\)。当然有一种方法可以做到这一点,我还没有找到......

更新:
根据 nemo 的回答和邀请,我提供了一个[跨平台的 Go 包](https://github.com/ricochet2200/go-disk- usage)来执行此操作。

正确答案

在 POSIX 系统上,您可以使用sys.unix.Statfs.
以当前工作目录的字节为单位打印可用空间的示例:

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,您还需要走系统调用路线。示例(,更新以匹配sys/windows):

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)

随意编写一个提供跨平台功能的包。关于如何实现跨平台的东西,请参阅[构建工具帮助页面](http://golang.org/pkg/go/build/#hdr- Build_Constraints)。

好了,本文到此结束,带大家了解了《使用 Go 获取可用磁盘空间量》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>