使用Go获取目录中的文件计数

使用Go获取目录中的文件计数,go,Go,如何获取io/ioutil.ReadDir()返回的项目数 我有这个代码,它是有效的,但我不得不认为这不是正确的方式(tm)在围棋 package main import "io/ioutil" import "fmt" func main() { files,_ := ioutil.ReadDir("/Users/dgolliher/Dropbox/INBOX") var count int for _, f := range files { fmt

如何获取io/ioutil.ReadDir()返回的项目数

我有这个代码,它是有效的,但我不得不认为这不是正确的方式(tm)在围棋

package main

import "io/ioutil"
import "fmt"

func main() {
    files,_ := ioutil.ReadDir("/Users/dgolliher/Dropbox/INBOX")
    var count int
    for _, f := range files {
        fmt.Println(f.Name())
        count++
    }
    fmt.Println(count)
}
第8-12行似乎太多了,无法只计算ReadDir的结果,但我无法找到正确的语法来获取计数,而不在该范围内进行迭代。帮助?

在中找到了答案

ReadDir返回按文件名排序的目录项列表,因此它不仅仅是文件。这里有一个小函数,供那些只想获取文件计数(而不是目录)的人使用:


如果你想得到所有的文件(不是递归的),你可以使用len(文件)。如果您需要只获取没有文件夹和隐藏文件的文件,只需在其上循环并增加计数器。请不要忽略错误

从Go 1.16(2021年2月)开始,更好的选择是
os.ReadDir

package main
import "os"

func main() {
   d, e := os.ReadDir(".")
   if e != nil {
      panic(e)
   }
   println(len(d))
}
os.ReadDir
返回
fs.DirEntry
而不是
fs.FileInfo
,这意味着
Size
ModTime
方法被省略,如果 您只需要一个条目计数


如果您严格要求计数,则应考虑使用。这样可以避免收集每个文件上的信息。遍历文件()可能会更有效率,但其底层也是Readdirnames。谢谢您的提示。在我开发的应用程序中,我希望此时更改我的实现会带来一个微不足道的优化。我下次再把这个建议归档!
func fileCount(path string) (int, error){
    i := 0
    files, err := ioutil.ReadDir(path)
    if err != nil {
        return 0, err
    }
    for _, file := range files {
        if !file.IsDir() { 
            i++
        }
    }
    return i, nil
}
package main
import "os"

func main() {
   d, e := os.ReadDir(".")
   if e != nil {
      panic(e)
   }
   println(len(d))
}