我试图在 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 特定的东西?不管怎样,感谢您的观看。
1 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
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"
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消