123456789101112131415161718192021222324252627 |
- package main
- import "golang.org/x/sys/windows"
- // getLongPathName converts Windows short pathnames to full pathnames.
- // For example C:\Users\ADMIN~1 --> C:\Users\Administrator.
- // It is a no-op on non-Windows platforms
- func getLongPathName(path string) (string, error) {
- // See https://groups.google.com/forum/#!topic/golang-dev/1tufzkruoTg
- p, err := windows.UTF16FromString(path)
- if err != nil {
- return "", err
- }
- b := p // GetLongPathName says we can reuse buffer
- n, err := windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
- if err != nil {
- return "", err
- }
- if n > uint32(len(b)) {
- b = make([]uint16, n)
- _, err = windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
- if err != nil {
- return "", err
- }
- }
- return windows.UTF16ToString(b), nil
- }
|