Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menentukan Jumlah Kapasiti Pemacu Menggunakan API Go dan Windows?

Bagaimana untuk Menentukan Jumlah Kapasiti Pemacu Menggunakan API Go dan Windows?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-28 02:28:11397semak imbas

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

Menentukan Kapasiti Pemacu dalam Windows Menggunakan API Go

Dalam soalan sebelumnya, anda mendapatkan panduan untuk mendapatkan ruang cakera yang tersedia dalam Go menggunakan Windows Panggilan API. Respons ini menunjukkan penggunaan fungsi GetDiskFreeSpaceExW() daripada kernel32.dll untuk mendapatkan maklumat ini.

Untuk meneruskan penerokaan anda, anda kini ingin menentukan jumlah saiz pemacu tertentu, seperti C:. Fungsi GetDiskFreeSpaceExW() boleh memenuhi keperluan ini juga.

Tandatangan GetDiskFreeSpaceExW()

Tandatangan fungsi ini adalah seperti berikut:

BOOL GetDiskFreeSpaceExW(
  LPCWSTR         lpDirectoryName,
  PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  PULARGE_INTEGER lpTotalNumberOfBytes,
  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

Ia memerlukan parameter dalam (laluan pemacu) dan mengembalikan tiga out-parameters: bait percuma yang tersedia untuk pemanggil, jumlah saiz cakera dan jumlah bait percuma.

Penggunaan dalam Go

Untuk menggunakan fungsi ini dalam Go, anda boleh mengikuti langkah berikut:

  1. Muat pautan dinamik kernel32.dll perpustakaan:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
  1. Dapatkan penuding fungsi ke fungsi GetDiskFreeSpaceExW():
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")
  1. Buat pembolehubah untuk menerima keputusan:
var free, total, avail int64
  1. Panggil fungsi dengan yang sesuai hujah:
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. Semak nilai pulangan dan cetak hasilnya:
fmt.Println(r1, r2, lastErr)
fmt.Println("Free:", free, "Total:", total, "Available:", avail)

Contoh Output

Menjalankan kod yang disediakan akan menghasilkan output yang serupa dengan ini:

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

Output ini menunjukkan bahawa pemacu C: mempunyai jumlah saiz 145545281536 bait.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Jumlah Kapasiti Pemacu Menggunakan API Go dan Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn