我試圖在 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 關注
- 172 瀏覽
添加回答
舉報
0/150
提交
取消