Ваш связанный вопрос + ответ показывает, как получить свободное место.В решении используется функция Windows API GetDiskFreeSpaceExW()
из kernel32.dll
для ее получения.
Эту же функцию можно использовать и для получения общего размера.Подпись функции GetDiskFreeSpaceExW()
:
BOOL GetDiskFreeSpaceExW(
LPCWSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailableToCaller,
PULARGE_INTEGER lpTotalNumberOfBytes,
PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
У нее есть входной параметр, путь и 3 выходных параметра, а именно свободные байты (доступные для вызывающей стороны), общее количество байтов (диск)size) и общее количество свободных байтов.
Поэтому просто, когда вы вызываете его, укажите переменные (указатели) для всей информации, которую вы хотите получить из него.
Например:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")
var free, total, avail int64
path := "c:\\"
r1, r2, lastErr := GetDiskFreeSpaceExW.Call(
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
uintptr(unsafe.Pointer(&free)),
uintptr(unsafe.Pointer(&total)),
uintptr(unsafe.Pointer(&avail)),
)
fmt.Println(r1, r2, lastErr)
fmt.Println("Free:", free, "Total:", total, "Available:", avail)
Запуск, пример вывода:
1 0 Success.
Free: 16795295744 Total: 145545281536 Available: 16795295744