英文:
GoLang: Reading a File Basics
问题
我只会为你提供翻译服务,以下是翻译好的内容:
我只是尝试读取与实际程序位于同一目录中的一个简单文件。我一直遇到这个奇怪的错误,我的Go语言正在“崛起”(正如他们所说)。
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// 这里通过程序打开一个平面文件。
// fn := " ... /foo.txt";
here, err := filepath.Abs(".")
check(err)
fmt.Println("------- DEBUG -------")
fmt.Println(here)
fmt.Println("------- DEBUG -------")
reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入文件名:")
f, err := reader.ReadString('\n')
f = filepath.Join(here, f)
fmt.Println(f)
check(err)
dat, err := ioutil.ReadFile(f)
check(err)
fmt.Print(string(dat))
}
这是我一直遇到的奇怪错误。
panic: 打开 ... /foo.txt: 没有那个文件或目录
goroutine 1 [running]:
main.check(0x22081c49a0, 0x2081ec240)
... /read.go:13 +0x50
main.main()
... /read.go:36 +0x6b0
exit status 2
当我只使用静态名称而不是标准输入时,它可以正常工作。标准输入的方式可能有些奇怪,它会尝试将字符串转换为文件路径。
英文:
I'm just trying to read a simple file that's in the same directory as the actual program. I keep getting this odd error and my Go is "emerging" (as they say).
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// Here's opening a flat file via the program.
// fn := " ... /foo.txt"
here, err := filepath.Abs(".")
check(err)
fmt.Println("------- DEBUG ------- ")
fmt.Println(here)
fmt.Println("------- DEBUG ------- ")
reader := bufio.NewReader(os.Stdin)
fmt.Print("Please Enter a File Name: ")
f, err := reader.ReadString('\n')
f = filepath.Join(here, f)
fmt.Println(f)
check(err)
dat, err := ioutil.ReadFile(f)
check(err)
fmt.Print(string(dat))
}
So here's the weird error, I keep getting.
panic: open ... /foo.txt
: no such file or directory
goroutine 1 [running]:
main.check(0x22081c49a0, 0x2081ec240)
... /read.go:13 +0x50
main.main()
... /read.go:36 +0x6b0
exit status 2
When I just use the static name and not standard in, it works fine. There must be something odd with the way standard in pulls in that string and then tries to turn it into a file path.
答案1
得分: 7
f, err := reader.ReadString('\n')
这个代码读取的是包括\n
在内的内容。所以你的文件名是/foo.txt\n
,而这个文件并不存在。
如果你愿意,你可以使用strings.Trim()
函数去掉换行符。
英文:
f, err := reader.ReadString('\n')
This reads up-to-and-including the \n
. So your filename is /foo.txt\n
which doesn't exist.
You can use strings.Trim()
to pull off the newline if you like.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论