>  기사  >  백엔드 개발  >  Go에서 프로그래밍 방식으로 모든 Windows 드라이브에 액세스하는 방법은 무엇입니까?

Go에서 프로그래밍 방식으로 모든 Windows 드라이브에 액세스하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-29 02:48:30669검색

How to Access All Windows Drives Programmatically in Go?

Go에서 모든 Windows 드라이브에 액세스

Go에서 Windows 시스템에 있는 모든 드라이브의 전체 목록을 검색하려면 특정 접근 방식이 필요합니다. 각 드라이브에 대해 "program.exe C:"와 같은 드라이브 문자를 수동으로 지정하지 않기 위해 동적 솔루션을 모색합니다.

kernel32.dll에서 GetLogicalDrives 기능을 활용하면 다음을 나타내는 비트맵을 얻을 수 있습니다. 사용 가능한 드라이브. bitToDrives 함수는 이 비트맵을 ["A", "B", "C",...]와 같은 해당 드라이브 문자 목록으로 변환합니다.

다음 Go 코드는 이 접근 방식을 보여줍니다.

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

이제 이 방법을 사용하면 사용자가 지정한 드라이브 문자에 의존하지 않고 Windows 시스템의 모든 드라이브를 원활하게 반복할 수 있습니다.

위 내용은 Go에서 프로그래밍 방식으로 모든 Windows 드라이브에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.