Maison >développement back-end >Golang >Comment accéder à tous les lecteurs Windows par programme dans Go ?

Comment accéder à tous les lecteurs Windows par programme dans Go ?

DDD
DDDoriginal
2024-10-29 02:48:30776parcourir

How to Access All Windows Drives Programmatically in Go?

Accès à tous les lecteurs Windows dans Go

Dans Go, récupérer une liste complète de tous les lecteurs sur un système Windows nécessite une approche spécifique. Pour éviter la spécification manuelle des lettres de lecteur comme "program.exe C:" pour chaque lecteur, une solution dynamique est recherchée.

En utilisant la fonction GetLogicalDrives du kernel32.dll, il est possible d'obtenir une bitmap représentant lecteurs disponibles. La fonction bitsToDrives convertit ce bitmap en une liste de lettres de lecteur correspondantes, telles que ["A", "B", "C",...].

Le code Go suivant illustre cette approche :

<code class="go">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
}</code>

En utilisant cette méthode, vous pouvez désormais parcourir tous les lecteurs d'un système Windows de manière transparente, sans vous fier aux lettres de lecteur spécifiées par l'utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn