Getting a List of Drives on Windows Using Golang
Seeking a more efficient way to search across all drives on a Windows system for a specific file type, Go programmers may wonder if it's possible to automatically obtain a list of available drives without user-specified input.
Solution using GetLogicalDrives and Bit Manipulation:
To list the drives on a Windows system, one can leverage the GetLogicalDrives function. This function returns a bit mask with each bit representing the availability of a drive letter from 'A' to 'Z.'
Here's a Golang code snippet that demonstrates the process:
package main
import (
"fmt"
"syscall"
)
func main() {
kernel32, _ := syscall.LoadLibrary("kernel32.dll")
getLogicalDrivesHandle, _ := syscall.GetProcAddress(kernel32, "GetLogicalDrives")
var drives []string
if ret, _, callErr := syscall.Syscall(uintptr(getLogicalDrivesHandle), 0, 0, 0, 0); callErr != 0 {
// handle error
} else {
drives = bitsToDrives(uint32(ret))
}
fmt.Printf("%v", drives)
}
func bitsToDrives(bitMap uint32) (drives []string) {
availableDrives := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
for i := range availableDrives {
if bitMap&1 == 1 {
drives = append(drives, availableDrives[i])
}
bitMap >>= 1
}
return
}
In this code, the GetLogicalDrives function is called to obtain the bit mask. The bitmask is then processed using bit manipulation techniques to extract the available drive letters and store them in the drives slice. By iterating through this slice, you can easily access and process all available drives on the system.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3