2014-06-08 26 views
2

如何獲取io/ioutil.ReadDir()返回的項目的數量?使用Go獲取目錄中文件的數量

我有這個代碼,它的工作原理,但我必須認爲是不是在Right的RightWay(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的結果,但是我無法找到正確的語法來獲得計數,而迭代的範圍內。幫幫我?

+0

如果您嚴格尋找一個數,你應該看看使用[File.Readdirnames(HTTPS:/ /golang.org/pkg/os/#File.Readdirnames)。這避免了收集每個文件的信息。散步文件([filepath.Walk](https://golang.org/pkg/path/filepath/#Walk))大概會更有效率,但是它也是Readdirnames。 – jpj

+0

感謝您的提示。在我開發的應用程序中,我希望通過改變我的實現來實現一個簡單的優化。我將在下次提交此建議! – golliher

回答

2

READDIR返回按文件名排序目錄條目的列表,所以它不只是文件。這裏是爲那些想獲得的文件只計數(而不是迪爾斯)一個小功能:

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 
}