12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package du
- import (
- "syscall"
- "unsafe"
- )
- type DiskUsage struct {
- freeBytes int64
- totalBytes int64
- availBytes int64
- }
- // NewDiskUsages returns an object holding the disk usage of volumePath
- // or nil in case of error (invalid path, etc)
- func NewDiskUsage(volumePath string) *DiskUsage {
- h := syscall.MustLoadDLL("kernel32.dll")
- c := h.MustFindProc("GetDiskFreeSpaceExW")
- du := &DiskUsage{}
- c.Call(
- uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(volumePath))),
- uintptr(unsafe.Pointer(&du.freeBytes)),
- uintptr(unsafe.Pointer(&du.totalBytes)),
- uintptr(unsafe.Pointer(&du.availBytes)))
- return du
- }
- // Free returns total free bytes on file system
- func (du *DiskUsage) Free() uint64 {
- return uint64(du.freeBytes)
- }
- // Available returns total available bytes on file system to an unprivileged user
- func (du *DiskUsage) Available() uint64 {
- return uint64(du.availBytes)
- }
- // Size returns total size of the file system
- func (du *DiskUsage) Size() uint64 {
- return uint64(du.totalBytes)
- }
- // Used returns total bytes used in file system
- func (du *DiskUsage) Used() uint64 {
- return du.Size() - du.Free()
- }
- // Usage returns percentage of use on the file system
- func (du *DiskUsage) Usage() float32 {
- return float32(du.Used()) / float32(du.Size())
- }
|