首頁 > 後端開發 > Golang > 主體

如何使用 Go 取得 Windows 磁碟機的總大小?

Barbara Streisand
發布: 2024-11-19 22:39:02
原創
438 人瀏覽過

How Can I Get the Total Size of a Windows Drive Using Go?

使用Go 決定Windows 中磁碟機的總大小

要使用Go 擷取Windows 中磁碟機的總大小,請深入研究標準Windows API 呼叫,特別是kernel32. dll 中的GetDiskFreeSpaceExW() 函數。雖然此函數以前用於獲取可用空間,但它還提供對驅動器總大小的存取。

解碼 GetDiskFreeSpaceExW() 函數

GetDiskFreeSpaceExW() 有幾個參數:

  • 指定驅動器路徑的內參數
  • 三個外參數捕獲可用的空閒位元組、總位元組(驅動器大小)和總空閒位元組

實現解

在Go在程式碼中,您可以如下實作此解決方案:

package main

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

func main() {
    kernelDLL, err := syscall.LoadDLL("kernel32.dll")
    if err != nil {
        fmt.Println("Failed to load kernel32.dll:", err)
        return
    }
    GetDiskFreeSpaceExW, err := kernelDLL.FindProc("GetDiskFreeSpaceExW")
    if err != nil {
        fmt.Println("Failed to find GetDiskFreeSpaceExW proc:", err)
        return
    }

    var free, total, avail int64

    path := "c:\"
    r1, r2, _ := GetDiskFreeSpaceExW.Call(
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
        uintptr(unsafe.Pointer(&free)),
        uintptr(unsafe.Pointer(&total)),
        uintptr(unsafe.Pointer(&avail)),
    )

    fmt.Println("Free:", free, "Total:", total, "Available:", avail)

    if r1 == 1 && r2 == 0 {
        fmt.Println("Success.")
    } else {
        fmt.Println("Failed:", syscall.Errno(r1))
    }
}
登入後複製

此程式碼將提供所需的輸出,顯示指定磁碟機上的總空間和可用空間。

以上是如何使用 Go 取得 Windows 磁碟機的總大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板