谁能解决这个问题?我认为问题可能出在传递给创建文件函数时的 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/