2014-06-08 3 views
2

io/ioutil.ReadDir()에서 반환 한 항목 수는 어떻게 얻을 수 있습니까?Go를 사용하여 디렉토리에있는 파일 수 얻기

나는 작동하지만이 코드는 Go에서 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

답변

10

내가 질문을 게시 한 직후에 그것을 알아 냈습니다.

는 READDIR은 파일 이름으로 분류 디렉토리 항목의 목록을 반환, 그래서 그냥 파일하지 http://blog.golang.org/go-slices-usage-and-internals

package main 

import "io/ioutil" 
import "fmt" 

func main() { 
    files,_ := ioutil.ReadDir("/Users/dgolliher/Dropbox/INBOX") 
    fmt.Println(len(files)) 
} 
2

에서 답을 찾을. 다음은 파일의 수 만 (그리고 DIRS) 얻기를 원하는 사람들을 위해 약간의 기능입니다 :/:

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 
} 
관련 문제