Golang - как указать путь к директории для windows

Этот код работает на Windows в терминале bash, но не работает в терминале cmd.

func main()  {
fmt.Print("Enter source directory path: ")
inBuf := bufio.NewReader(os.Stdin)
inDir, _ := inBuf.ReadString('\n')
inDir = strings.Replace(inDir, "\n", "", -1)

files, err := ioutil.ReadDir(inDir)
if err != nil {
    log.Fatalf("error reading files from dir %s : %s", inDir, err.Error())
}
for _, file := range files {
    if file.IsDir() {
        continue
    }

    fmt.Printf("filename: %s", file.Name())
}
fmt.Println("ok")
}

Результат в cmd:

C:\Users\dev\go\src\awesomeProject4>awesomeProject4.exe

Enter source directory path: C:\files

: The filename, directory name, or volume label syntax is incorrect.

Подскажите, что надо изменить в коде или как вводить путь к директории в stdin, чтобы работало в cmd.exe?


Ответы (1 шт):

Автор решения: zed

В Windows перевод строки, это два символа \r\n, а не один \n как в Unix. Соответственно, вам это надо учитывать - замените у себя в коде строку inDir = strings.Replace(inDir, "\n", "", -1) на две такие:

inDir = strings.TrimSuffix(inDir, "\n")
inDir = strings.TrimSuffix(inDir, "\r")
→ Ссылка