Получить DOS (8.3) имя файла - PullRequest
       14

Получить DOS (8.3) имя файла

0 голосов
/ 29 сентября 2018

У меня есть каталог с именами файлов, которые содержат «забавные» символы.Я хотел бы получить имя файла dos (8.3) для файлов.Как я могу это сделать?Мой язык выбора: Go.

C:\...\foo>dir /x
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: 329F-C2FE

 Verzeichnis von C:\...\foo

29.09.2018  16:22    <DIR>                       .
29.09.2018  16:22    <DIR>                       ..
23.07.2009  01:52             5.526 CW9463~1.PDF cöw.pdf
               1 Datei(en),      1.922.706 Bytes
               0 Verzeichnis(se), 48.235.646.976 Bytes frei

Я хотел бы получить имя файла CW9463~1.PDF вместо cöw.pdf.

(я буду использовать это имя файла, чтобы открыть файл длячтение.)

1 Ответ

0 голосов
/ 30 сентября 2018

Я нашел решение, но оно мне не очень помогает.(См. Комментарий / предупреждение от @eryksun)

import (
    "golang.org/x/sys/windows"
)

func GetShortPathName(name string) (path string, err error) {
    lp, err := windows.UTF16PtrFromString(name)
    if err != nil {
        return "", err
    }
    n := uint32(100)

    for {
        buf := make([]uint16, n)
        n, err = windows.GetShortPathName(lp, &buf[0], uint32(len(buf)))
        if err != nil {
            return "", err
        }
        if n <= uint32(len(buf)) {
            return windows.UTF16ToString(buf[:n]), nil
        }
    }
}
...