基本的に、空き容量とボリュームの合計サイズの両方を含むdf -h
の出力が必要です。このソリューションは、Windows、Linux、およびMacで動作し、Goで記述されている必要があります。
os
とsyscall
Goのドキュメントを調べましたが、何も見つかりませんでした。 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)
クロスプラットフォームの機能を提供するパッケージを自由に作成してください。クロスプラットフォームで何かを実装する方法については、 ビルドツールのヘルプページ を参照してください。