go - 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 无法识别变量并且只能识别硬编码文件名的任何原因?
解决方案
从文档:
ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。
新行在mFile
. 在将其传递给 os.Open 之前,您需要将其剥离。当您对文件名进行硬编码时,您没有包含尾随的新行。
推荐阅读
- jsf - Wildfly 不提供 JSF 实现?
- python - 如何使用 discord.py 获取消息
- r - 安装软件包时出错。错误 dyn.load(文件,DLLpath = DLLpath,...):
- wordpress - WooCommerce Rest API 获取订单日期
- message-queue - 死信策略 - ActiveMQ Artemis
- angular - 路由Nativescript(Angular)时如何不显示导航栏
- linux - 终端中的 Grpc 通道状态通知
- javascript - 使用模板文字附加 HTMLVideoElement 对象
- bash - 如何在 Bash 中设置环境变量数组
- php - 使用 hasMany 关系上传多张图片