Obtener una lista de unidades en Windows usando Golang
Buscar una forma más eficiente de buscar en todas las unidades de un sistema Windows una unidad específica tipo de archivo, los programadores de Go pueden preguntarse si es posible obtener automáticamente una lista de unidades disponibles sin la entrada especificada por el usuario.
Solución usando GetLogicalDrives y manipulación de bits:
Para enumerar las unidades en un sistema Windows, se puede aprovechar la función GetLogicalDrives. Esta función devuelve una máscara de bits en la que cada bit representa la disponibilidad de una letra de unidad de la 'A' a la 'Z'.
Aquí hay un fragmento de código de Golang que demuestra el proceso:
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
}
En este código, se llama a la función GetLogicalDrives para obtener la máscara de bits. Luego, la máscara de bits se procesa utilizando técnicas de manipulación de bits para extraer las letras de unidad disponibles y almacenarlas en el segmento de unidades. Al recorrer este segmento, puede acceder y procesar fácilmente todas las unidades disponibles en el sistema.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3