Obtendo uma lista de unidades no Windows usando Golang
Buscando uma maneira mais eficiente de pesquisar em todas as unidades em um sistema Windows por um determinado tipo de arquivo, os programadores Go podem se perguntar se é possível obter automaticamente uma lista de unidades disponíveis sem entrada especificada pelo usuário.
Solução usando GetLogicalDrives e manipulação de bits:
Para listar as unidades em um sistema Windows, pode-se aproveitar a função GetLogicalDrives. Esta função retorna uma máscara de bits com cada bit representando a disponibilidade de uma letra de unidade de 'A' a 'Z.'
Aqui está um trecho de código Golang que demonstra o processo:
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
}
Neste código, a função GetLogicalDrives é chamada para obter a máscara de bits. A máscara de bits é então processada usando técnicas de manipulação de bits para extrair as letras de unidade disponíveis e armazená-las na fatia das unidades. Ao iterar por essa fatia, você pode acessar e processar facilmente todas as unidades disponíveis no sistema.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3