os.Open 无法识别文件名变量,但“硬编码”文件名​​可以

正如标题所说,我正在尝试读取具有 1 个 9x9 谜题的数独谜题文件。这是代码:


package main


import (

    "bufio"

    "fmt"

    "log"

    "os"

)


func check(e error){

    if e != nil{

        panic(e)

    }

}


func main(){

    var mFile string

    var puzzle []string


    s := bufio.NewReader(os.Stdin)

    fmt.Println("Please enter file name: ")

    mFile, _ = s.ReadString('\n')


    fmt.Print("Confirm file: " + mFile)


    readFile, err := os.Open(mFile)


    if err != nil{

        log.Fatalf("Failed to open file: %s", err)

    }


    fileScanner := bufio.NewScanner(readFile)

    fileScanner.Split(bufio.ScanLines)


    for fileScanner.Scan() {

        puzzle = append(puzzle, fileScanner.Text())

    }


    readFile.Close()


    for _, eachLine := range puzzle{

        fmt.Println(eachLine)

    }


}

程序要求输入文件名,该文件名被接受,第 24 行:


fmt.Print("Confirm file: " + mFile)

确认文件名被捕获,但是当它将变量传递给 os.Open 时,它说文件不存在。但是,如果我手动编码 os.Open("theFileName.txt") ,文件将按预期打开和打印。


os.Open 无法识别变量并且只能识别硬编码文件名的任何原因?


HUH函数
浏览 161回答 2
2回答

慕标5832272

从文档:ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。新行在mFile. 在将其传递给 os.Open 之前,您需要将其剥离。当您对文件名进行硬编码时,您没有包含尾随的新行。

蛊毒传说

只要文件名之间没有空格,您也可以使用 fmt.Scan() 接受用户的文本输入(换行符算作空格)package mainimport (    "bufio"    "fmt"    "log"    "os")func check(e error) {    if e != nil {        panic(e)    }}func main() {    var puzzle []string    var fName string    fmt.Println("Please enter file name: ")    _, err := fmt.Scan(&fName)    if err != nil {        log.Println(err)        return    }    fmt.Println("Confirm file:" + fName)    readFile, err := os.Open(fName)    if err != nil {        log.Fatalf("Failed to open file: %s", err)    }    fileScanner := bufio.NewScanner(readFile)    fileScanner.Split(bufio.ScanLines)    for fileScanner.Scan() {        puzzle = append(puzzle, fileScanner.Text())    }    readFile.Close()    for _, eachLine := range puzzle {        fmt.Println(eachLine)    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go