猿问

无法在 Windows 上创建文件夹

我试图在 Windows 上创建一个文件夹,但不断收到错误消息,我不明白为什么。


代码片段:


reader := bufio.NewReader(os.Stdin)

fmt.Print("Hostname: ")

hostname, _ := reader.ReadString('\n')


now := time.Now().Format("20060102150405")

var folderName string = fmt.Sprintf("%s_%s", now, hostname)


err := os.Mkdir(folderName, os.ModePerm)


if err != nil {

    log.Fatal(err)

}

错误(从荷兰语翻译):


2022/06/10 13:37:13 mkdir 20220610133713_TEST

: The syntax of the file name, folder name or volume name is incorrect.

exit status 1

我尝试使用带 \\ 的完整路径和相对路径 .\ 或 .\\


我用下面的代码解决了这个错误,但这不是要走的路......;)


cmd := exec.Command("cmd.exe", "/C", fmt.Sprintf("mkdir %s", folderName))

err := cmd.Run()

这些问题可能很明显,但我看不出原因。也许是 Windows 特定的东西?


不管怎样,感谢您的观看。


开心每一天1111
浏览 150回答 1
1回答

慕容3067478

Reader.ReadString()记录:ReadString 一直读取到输入中第一次出现 delim 为止,返回一个包含数据的字符串,直到并包括 delimiter。Reader.ReadString('\n')不修剪换行符,返回的字符串将包含尾随\n字符。打印出来就可以看到了:fmt.Printf("%q\n", folderName)这将输出(在Go Playground上尝试):"20091110230000_TEST\n"Windows 不允许在文件夹名称中使用换行符。解决方案:使用bufio.Scanner.例如:scanner := bufio.NewScanner(strings.NewReader("TEST\n"))if !scanner.Scan() {    return // No input}hostname := scanner.Text()now := time.Now().Format("20060102150405")var folderName string = fmt.Sprintf("%s_%s", now, hostname)fmt.Printf("%q\n", folderName)这将输出(在Go Playground上尝试):"20091110230000_TEST"
随时随地看视频慕课网APP

相关分类

Go
我要回答