Go ReadString 问题:文件名、目录名称或卷标语法不正确



谁能弄清楚这一点?我认为问题可能出在传递给创建文件函数时的 readstring(( 参数中。我尝试通过剥离""来解决它,但错误仍然存在。除了 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("%qn", 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("%qn", 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.filern"
Name:test.file
test.file
: The filename, directory name, or volume label syntax is incorrect.
exit status 1

在Windows上,该行以"rn"结尾。


取代

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("%qn", 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.filern"
Name:test.file
test.file

现在程序已工作,请删除此调试语句:

fmt.Printf("%qn", text)

转到cmd,键入命令:

go env -w GO111MODULE=off

最后,使用命令:

go run ./

最新更新