//go:build windows // +build windows package main import ( "syscall" "unsafe" ) func getTotalDiskSpace(path string) uint64 { kernel32 := syscall.NewLazyDLL("kernel32.dll") getDiskFreeSpaceExW := kernel32.NewProc("GetDiskFreeSpaceExW") lpDirectoryName, err := syscall.UTF16PtrFromString(path) if err != nil { printErr("Failed to encode path for Windows API: %v", err) return 0 } var freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes uint64 r1, _, err := getDiskFreeSpaceExW.Call( uintptr(unsafe.Pointer(lpDirectoryName)), uintptr(unsafe.Pointer(&freeBytesAvailable)), uintptr(unsafe.Pointer(&totalNumberOfBytes)), uintptr(unsafe.Pointer(&totalNumberOfFreeBytes)), ) if r1 == 0 { printErr("GetDiskFreeSpaceExW failed: %v", err) return 0 } return totalNumberOfBytes }