Home  >  Article  >  Backend Development  >  How to Get the Total Size of a Windows Drive in Go?

How to Get the Total Size of a Windows Drive in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-11-19 10:59:02536browse

How to Get the Total Size of a Windows Drive in Go?

Retrieving the Total Size of a Drive in Go on Windows

In previous efforts, you successfully determined the free space available on a drive. Building on this knowledge, you now seek to retrieve the total size of a specific drive, such as "C:."

To address this request, the GetDiskFreeSpaceExW() Windows API function from the kernel32.dll can be employed. This function requires an in-parameter (the drive path) and provides three out-parameters:

  • Free bytes available to the caller
  • Total number of bytes (disk size)
  • Total number of free bytes

By allocating variables for the information you wish to obtain, you can utilize the GetDiskFreeSpaceExW() function. Here's an example implementation:

import (
    "syscall"
    "unsafe"
    "fmt"
)

func main() {
    kernelDLL, err := syscall.LoadDLL("kernel32.dll")
    if err != nil {
        panic(err)
    }

    getDiskFreeSpaceExW, err := kernelDLL.FindProc("GetDiskFreeSpaceExW")
    if err != nil {
        panic(err)
    }
    
    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)
}

Running this code yields output such as:

1 0 Success.
Free: 16795295744 Total: 145545281536 Available: 16795295744

This information provides a comprehensive view of the disk usage and capacity.

The above is the detailed content of How to Get the Total Size of a Windows Drive in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn