为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Windows 上创建文件夹

无法在 Windows 上创建文件夹

Go
开心每一天1111 2022-12-19 20:49:09
我试图在 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个赞

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"


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信