gpt4 book ai didi

Go ReadString 问题 : The filename, 目录名,或卷标语法不正确

转载 作者:IT王子 更新时间:2023-10-29 02:01:54 26 4
gpt4 key购买 nike

谁能解决这个问题?我认为问题可能出在传递给创建文件函数时的 readstring() 参数中。我尝试通过剥离 '\n' 来解决它,但错误仍然存​​在。除了 readstring() 之外还有其他解决方法吗?因为我认为这是导致问题的原因。谢谢

package main

import (
"fmt"
"bufio"
"log"
"strings"
//"io/ioutil"
"os"
)

func main() {
fmt.Print("Enter filename to create: ")

reader := bufio.NewReader(os.Stdin)

text, _ := reader.ReadString('\n')
text = strings.TrimSuffix(text, "\n")


if len(text) > 3 {
//newFile, err := os.Create(text)
fmt.Println("Name:"+text)
createFile(text)
} else {
fmt.Println("invalid filename")
}

}

func createFile(fileName string){
var newFile *os.File
var err error


fmt.Println(fileName)

newFile, err = os.Create(fileName)
if err != nil {
log.Fatal(err)
}
newFile.Close()
}

好的,对于这个问题的新手,我已经设法使用 scanf 找到了解决方法。所以考虑这个问题解决了。

最佳答案

从基本的调试技术开始:检查错误和检查输入。


替换

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

text, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
fmt.Printf("%q\n", text)

例如,

so1.go:

package main

import (
"bufio"
"fmt"
"log"
"strings"
//"io/ioutil"
"os"
)

func main() {
fmt.Print("Enter filename to create: ")

reader := bufio.NewReader(os.Stdin)

text, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
fmt.Printf("%q\n", text)

text = strings.TrimSuffix(text, "\n")

if len(text) > 3 {
//newFile, err := os.Create(text)
fmt.Println("Name:" + text)
createFile(text)
} else {
fmt.Println("invalid filename")
}

}

func createFile(fileName string) {
var newFile *os.File
var err error

fmt.Println(fileName)

newFile, err = os.Create(fileName)
if err != nil {
log.Fatal(err)
}
newFile.Close()
}

输出:

>go run so1.go
Enter filename to create: test.file
"test.file\r\n"
Name:test.file
test.file
: The filename, directory name, or volume label syntax is incorrect.
exit status 1

在 Windows 上,该行以“\r\n”结束。


替换

text = strings.TrimSuffix(text, "\n")

text = strings.TrimSuffix(text, "\n")
text = strings.TrimSuffix(text, "\r")

例如,

so2.go:

package main

import (
"bufio"
"fmt"
"log"
"strings"
//"io/ioutil"
"os"
)

func main() {
fmt.Print("Enter filename to create: ")

reader := bufio.NewReader(os.Stdin)

text, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
fmt.Printf("%q\n", text)

text = strings.TrimSuffix(text, "\n")
text = strings.TrimSuffix(text, "\r")

if len(text) > 3 {
//newFile, err := os.Create(text)
fmt.Println("Name:" + text)
createFile(text)
} else {
fmt.Println("invalid filename")
}

}

func createFile(fileName string) {
var newFile *os.File
var err error

fmt.Println(fileName)

newFile, err = os.Create(fileName)
if err != nil {
log.Fatal(err)
}
newFile.Close()
}

输出:

>go run so2.go
Enter filename to create: test.file
"test.file\r\n"
Name:test.file
test.file

现在程序可以运行了,删除这个调试语句:

fmt.Printf("%q\n", text)

关于Go ReadString 问题 : The filename, 目录名,或卷标语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com