2015-07-16 2 views
0

Довольно новый at go. Я пытаюсь в основном прочитать все файлы в каталоге и подкаталоге, заполнить фрагмент, а затем обработать дальше. Вот код (Основные функции смотреть являются Main и expandDirectoryПустой ломтик возвращен

package main 

import (
    "fmt" 
    "io/ioutil" 
    "os" 
) 

const dirname string = "MyDirectory" 

func check(e error) { 
    if e != nil { 
     panic(e) 
    } 

} 

func expandDirectory(currentDirectory string, allFiles []os.FileInfo) []os.FileInfo { 
    files, e := ioutil.ReadDir(currentDirectory) 
    check(e) 
    for _, internalDir := range files { 
     switch mode := internalDir.Mode(); { 
     case mode.IsDir(): 
      var filepath = currentDirectory + internalDir.Name() + "\\" 
      expandDirectory(filepath, allFiles) 
     case mode.IsRegular(): 
      allFiles = append(allFiles, internalDir) 
     } 
    } 
    return allFiles 
} 

func main() { 
    allFiles := expandDirectory(dirname, make([]os.FileInfo, 5)) 
    fmt.Printf("%v", cap(allFiles)) 
} 

Окончательный печати напечатает 5, который представляет собой первоначальное значение.

Просто FYI, то expandDirectory функция просто рекурсивная функция случай каталогов и добавление ссылки на файл в случае файла.

Спасибо за помощь

Где я буду неправильно

окончательный код (только изменения)

func main() { 
    allFiles := expandDirectory(dirname) 
} 


func expandDirectory(currentDirectory string) []os.FileInfo { 
    allFiles := make([]os.FileInfo, 0, 5) 
    .... 
     case mode.IsDir(): 
    .... 
      allFiles = append(allFiles, expandDirectory(filepath)...) 
    .... 
    return allFiles 
} 

ответ

0

Вам нужно добавить результат к нему:

allFiles = append(allFiles, expandDirectory(filepath, allFiles)...) 

Также

allFiles := expandDirectory(dirname, make([]os.FileInfo, 5)) 

должно быть:

allFiles := expandDirectory(dirname, make([]os.FileInfo, 0, 5)) 

В противном случае вы будете добавлять к allFiles, и первые 5 предметов будут пустыми.

Смежные вопросы