首页 > 解决方案 > 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 无法识别变量并且只能识别硬编码文件名的任何原因?

标签: go

解决方案


文档

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

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


推荐阅读