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() にはいくつかのパラメータがあります:

  • ドライブのパスを指定する in パラメータ
  • 利用可能な空きバイト数、合計バイト数 (ドライブ サイズ)、および合計空きバイト数をキャプチャする 3 つの out パラメータ

実装解決策

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート