首頁 > 後端開發 > Golang > 如何使用 Go 和 Windows API 來決定磁碟機的總容量?

如何使用 Go 和 Windows API 來決定磁碟機的總容量?

Mary-Kate Olsen
發布: 2024-11-28 02:28:11
原創
498 人瀏覽過

How to Determine a Drive's Total Capacity Using Go and Windows APIs?

使用Go API 確定Windows 中的驅動器容量

在上一個問題中,您尋求有關使用Windows 獲取Go 中的可用磁碟空間的指導API 呼叫。此回應示範如何使用 kernel32.dll 中的 GetDiskFreeSpaceExW() 函數來擷取此資訊。

為了進一步探索,您現在希望確定特定磁碟機(例如 C:)的總大小。 GetDiskFreeSpaceExW()函數也可以滿足這個需求。

GetDiskFreeSpaceExW()的簽章

函數的簽章如下:

BOOL GetDiskFreeSpaceExW(
  LPCWSTR         lpDirectoryName,
  PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  PULARGE_INTEGER lpTotalNumberOfBytes,
  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
登入後複製

它接受一個內參數(驅動路徑)並傳回三子個外參數:自由呼叫者可用的位元組數、磁碟的總大小以及總的可用位元組數。

Go 中的用法

要在 Go中使用此函數,您可以按照這些步驟:

  1. 載入kernel32.dll動態連結庫:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
登入後複製
  1. 取得指向 GetDiskFreeSpaceExW(>
取得指向 GetDiskFreeSpaceExW())函數的函數指標:
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
登入後複製
範例輸出

運作提供的程式碼將產生類似下列內容的輸出this:此輸出顯示 C: 磁碟機的總大小為 145545281536 位元組。

以上是如何使用 Go 和 Windows API 來決定磁碟機的總容量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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