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.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3