Go os.Open无法识别文件名变量,但;“硬编码”;文件名不起作用
正如标题所说,我正在尝试读取一个包含19x9个谜题的数独谜题文件。代码如下:Go os.Open无法识别文件名变量,但;“硬编码”;文件名不起作用,go,Go,正如标题所说,我正在尝试读取一个包含19x9个谜题的数独谜题文件。代码如下: 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.NewRea
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之前,需要将其剥离。硬编码文件名时,没有包含尾随的新行。也可以使用fmt.Scan()接受用户的文本输入,只要文件名之间没有空格(新行计为空格)
当答案像
mFile=mFile[:len(mFile)-1]
或mFile=strings.TrimSpace(mFile)
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)
}
}