使用Go获取目录中的文件计数
如何获取io/ioutil.ReadDir()返回的项目数 我有这个代码,它是有效的,但我不得不认为这不是正确的方式(tm)在围棋使用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
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))
}