如何使用Go从stdin上指定的目录中读取文件名

时间:2015-04-21 21:41:59

标签: go

我想读取给定目录中的所有文件,我试过这个:

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”行,这将始终返回“[]”。任何人都可以指出代码的问题,或提供一种更简单的方法来完成这项任务?谢谢!

2 个答案:

答案 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)

建议步骤:

  1. 使用 bufio
  2. 向用户请求目录
  3. 使用 os
  4. ,根据常用路径缩写确定绝对路径
  5. 使用 ioutil
  6. 读取目录内容
  7. 打印绝对路径;遍历目录内容并打印每个项目的名称

  8. 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())
        }
    }