首页 > 文章列表 > 如何使用 golang 获取 Windows 上所有驱动器的列表?

如何使用 golang 获取 Windows 上所有驱动器的列表?

golang
211 2023-03-11

问题内容

如何使用 golang 获取 Windows 上所有驱动器的列表?

正确答案

在 Golang 中,可以使用 syscall 包来获取 Windows 上所有驱动器的列表。具体实现如下:

package main

import (
    "fmt"
    "syscall"
    "unsafe"
)

func main() {
    kernel32, err := syscall.LoadLibrary("kernel32.dll")
    if err != nil {
        panic(err)
    }
    getLogicalDrives, err := syscall.GetProcAddress(kernel32, "GetLogicalDrives")
    if err != nil {
        panic(err)
    }
    defer syscall.FreeLibrary(kernel32)

    drives := syscall.MustLoadDLL("kernel32.dll").MustFindProc("GetLogicalDrives").Call()

    // Convert the result to an int32
    drivesInt := *(*int32)(unsafe.Pointer(&drives[0]))

    for i := 0; i < 26; i++ {
        if drivesInt&(1<

上面的代码中,首先使用 LoadLibrary 函数加载 kernel32.dll,然后使用 GetProcAddress 函数获取 GetLogicalDrives 函数的地址。接着,使用 Call 方法调用 GetLogicalDrives 函数,并将返回值转换为 int32 类型。最后,通过循环检查每个驱动器的状态,并输出其名称。

需要注意的是,由于 Windows 支持的驱动器数量最多为 26 个(A-Z),因此循环中的终止条件是 26。同时,每个驱动器的状态可以通过将返回值与 1 左移该驱动器对应的位数取按位与的方式来检查,如果结果不为 0,则表示该驱动器存在。