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

标签 go

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

相关文章:

go - 当您向 channel 发送消息并关闭它时是否存在数据竞争?

parsing - 使用 Go 解析 Go 时间戳

go - 自定义 golang sql.NullString Stringer 接口(interface)

mongodb - 过滤集合但按内部属性排序

go - undefined <type float32 has no field or method sum> 错误。如何解决?

xml - 你能在 GO 中动态生成 XML 吗?

windows - 在 Windows 中调试 Go (golang) 代码

internet-explorer - Internet Explorer 中的 Go 和 gorilla session

go - GO 中自定义类型的枚举

go - fabric-sdk-go 错误 : No peers to connect to