ホームページ >バックエンド開発 >Golang >Go と Windows API を使用してドライブの総容量を確認するにはどうすればよいですか?

Go と Windows API を使用してドライブの総容量を確認するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 02:28:11398ブラウズ

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
);

in-パラメータ (ドライブパス) を受け取り、3 つの値を返します。 out-parameters: 呼び出し元が使用できる空きバイト数、ディスクの合計サイズ、および合計空きバイト数。

Go での使用法

この関数を利用するにはGo では、次の手順を実行できます。

  1. kernel32.dll ダイナミック リンクをロードします。ライブラリ:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
  1. GetDiskFreeSpaceExW() 関数への関数ポインタを取得します。 関数:
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")
  1. results:
var free, total, avail int64
  1. 適切な引数を使用して関数を呼び出します:
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)),
)
  1. 戻り値を確認し、結果を出力します:
fmt.Println(r1, r2, lastErr)
fmt.Println("Free:", free, "Total:", total, "Available:", avail)

例出力

提供されたコードを実行すると、次のような出力が生成されます。

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

この出力は、C: ドライブの合計サイズが 145545281536 バイトであることを示します。

以上がGo と Windows API を使用してドライブの総容量を確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。