我想读取给定目录中的所有文件,我试过这个:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
fmt.Print("directory: ")
inBuf := bufio.NewReader(os.Stdin)
inDir, _ := inBuf.ReadString('\n')
strings.Replace(inDir, "\\", "/", -1)
files, _ := ioutil.ReadDir(inDir)
fmt.Println(files)
}
无论是否有“strings.Replace”行,这将始终返回“[]”。任何人都可以指出代码的问题,或提供一种更简单的方法来完成这项任务?谢谢!
答案 0 :(得分:2)
它无效,因为您必须从inDir变量中删除\ n,否则它会尝试列出“dirprovided \ n”的内容。这样的事情可能有用:
func main() {
fmt.Print("directory: ")
inBuf := bufio.NewReader(os.Stdin)
inDir, _ := inBuf.ReadString('\n')
inDir = strings.Replace(inDir, "\n", "", -1)
files, _ := ioutil.ReadDir(inDir)
fmt.Println(files)
}
编辑:同样如上所述,打印错误而不是删除会有所帮助。这就是我所做的一切。
答案 1 :(得分:0)
建议步骤:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
)
func main() {
// STEP ONE
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Choose a directory: ")
scanner.Scan()
dir := scanner.Text()
// STEP TWO
if dir[:1] == "~" {
dir = os.Getenv("HOME") + dir[1:]
} else if dir[:1] != "/" {
pwd, _ := os.Getwd()
dir = pwd + "/" + dir
}
// STEP THREE
files, _ := ioutil.ReadDir(dir)
// STEP FOUR
fmt.Println("Directory: ", dir, "\n")
for _, f := range files {
fmt.Println(f.Name())
}
}