为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
HUH函数 2022-05-23 15:31:17
正如标题所说,我正在尝试读取具有 1 个 9x9 谜题的数独谜题文件。这是代码:package mainimport (    "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 无法识别变量并且只能识别硬编码文件名的任何原因?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

文档

ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。

新行在mFile. 在将其传递给 os.Open 之前,您需要将其剥离。当您对文件名进行硬编码时,您没有包含尾随的新行。


查看完整回答
反对 回复 2022-05-23
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

只要文件名之间没有空格,您也可以使用 fmt.Scan() 接受用户的文本输入(换行符算作空格)


package main


import (

    "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)

    }


}


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信