Подтвердить что ты не робот

Получите количество свободного места на диске с помощью Go

В принципе, мне нужен вывод df -h, который включает как свободное пространство, так и общий размер тома. Решение должно работать на Windows, Linux и Mac и быть написано на Go.

Я просмотрел документацию os и syscall Go и ничего не нашел. В Windows даже утилиты командной строки либо неудобны (dir C:\), либо требуют повышенных привилегий (fsutil volume diskfree C:\). Конечно, есть способ сделать это, что я еще не нашел...

UPDATE:
Ответ на nemo и приглашение, я предоставил кросс-платформенный пакет Go, который делает это.

4b9b3361

Ответ 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)

Не стесняйтесь писать пакет, который обеспечивает функциональность кросс-платформенной. О том, как реализовать что-то кросс-платформенное, см. В справочной странице .