Heim >Backend-Entwicklung >Golang >Wie greife ich in Go programmgesteuert auf alle Windows-Laufwerke zu?

Wie greife ich in Go programmgesteuert auf alle Windows-Laufwerke zu?

DDD
DDDOriginal
2024-10-29 02:48:30763Durchsuche

How to Access All Windows Drives Programmatically in Go?

Zugriff auf alle Windows-Laufwerke in Go

In Go erfordert das Abrufen einer umfassenden Liste aller Laufwerke auf einem Windows-System einen bestimmten Ansatz. Um die manuelle Angabe von Laufwerksbuchstaben wie „program.exe C:“ für jedes Laufwerk zu vermeiden, wird eine dynamische Lösung gesucht.

Durch die Verwendung der GetLogicalDrives-Funktion aus der kernel32.dll ist es möglich, eine Bitmap-Darstellung zu erhalten verfügbare Laufwerke. Die bitsToDrives-Funktion wandelt diese Bitmap in eine Liste entsprechender Laufwerksbuchstaben um, z. B. ["A", "B", "C",...].

Der folgende Go-Code demonstriert diesen Ansatz:

<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>

Mit dieser Methode können Sie jetzt alle Laufwerke auf einem Windows-System nahtlos durchlaufen, ohne sich auf benutzerdefinierte Laufwerksbuchstaben verlassen zu müssen.

Das obige ist der detaillierte Inhalt vonWie greife ich in Go programmgesteuert auf alle Windows-Laufwerke zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn