Lista katalogów w Go
Próbowałem dowiedzieć się, jak po prostu wyświetlić listę plików i folderów w jednym katalogu w Go.
Znalazłem filepath.Walk
, ale to idzie do podkatalogów automatycznie, czego nie chcę. Wszystkie moje poszukiwania nie wykazały niczego lepszego.
Jestem pewien, że ta funkcjonalność istnieje, ale naprawdę trudno ją znaleźć. Daj znać, jeśli ktoś wie, gdzie mam szukać. Dzięki.
4 answers
Możesz spróbować użyć funkcji ReadDir w pakiecie io/ioutil
. Na docs:
ReadDir odczytuje katalog nazwany przez dirname i zwraca listę posortowanych wpisów katalogu.
Wynikowy wycinek zawiera typy os.FileInfo
, które dostarczają metod wymienionych tutaj . Oto podstawowy przykład, który wyświetla nazwę wszystkiego w bieżącym katalogu (foldery są dołączone, ale nie są specjalnie oznaczone - możesz sprawdzić, czy Element jest folderem za pomocą IsDir()
metoda):
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
files, err := ioutil.ReadDir("./")
if err != nil {
log.Fatal(err)
}
for _, f := range files {
fmt.Println(f.Name())
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 02:38:01
Jeszcze prostsze, użyj path/filepath
:
package main
import (
"fmt"
"log"
"path/filepath"
)
func main() {
files, err := filepath.Glob("*")
if err != nil {
log.Fatal(err)
}
fmt.Println(files) // contains a list of all files in the current directory
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 13:32:39
Możemy uzyskać listę plików wewnątrz folderu w systemie plików za pomocą różnych funkcji biblioteki standardowej golang.
- filepath.Spacer
- ioutil.ReadDir
- os.Plik.Readdir
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
var (
root string
files []string
err error
)
root := "/home/manigandan/golang/samples"
// filepath.Walk
files, err = FilePathWalkDir(root)
if err != nil {
panic(err)
}
// ioutil.ReadDir
files, err = IOReadDir(root)
if err != nil {
panic(err)
}
//os.File.Readdir
files, err = OSReadDir(root)
if err != nil {
panic(err)
}
for _, file := range files {
fmt.Println(file)
}
}
- korzystanie z filepath.Spacer
Pakiet
path/filepath
zapewnia poręczny sposób skanowania wszystkich plików w katalogu, automatycznie przeskanuje każdy podkatalog w katalog.
func FilePathWalkDir(root string) ([]string, error) {
var files []string
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
files = append(files, path)
}
return nil
})
return files, err
}
- za pomocą ioutil.ReadDir
ioutil.ReadDir
odczytuje katalog nazwany przez dirname i zwraca lista wpisów katalogowych posortowanych według nazwy pliku.
func IOReadDir(root string) ([]string, error) {
var files []string
fileInfo, err := ioutil.ReadDir(root)
if err != nil {
return files, err
}
for _, file := range fileInfo {
files = append(files, file.Name())
}
return files, nil
}
- korzystanie z systemu operacyjnego.Plik.Readdir
Readdir odczytuje zawartość katalogu powiązanego z plikiem i zwraca kawałek o wartości do n FileInfo, tak jak zwracany przez Lstat, w kolejności katalogów. Kolejne wezwania na ten sam plik będzie / align = "left" /
func OSReadDir(root string) ([]string, error) {
var files []string
f, err := os.Open(root)
if err != nil {
return files, err
}
fileInfo, err := f.Readdir(-1)
f.Close()
if err != nil {
return files, err
}
for _, file := range fileInfo {
files = append(files, file.Name())
}
return files, nil
}
Wyniki porównawcze.
Dowiedz się więcej o tymblogu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 15:18:07
ioutil.ReadDir
jest dobrym znaleziskiem, ale jeśli klikniesz i spojrzysz na źródło, zobaczysz, że wywołuje metodę Readdir systemu operacyjnego.Plik . Jeśli nie masz nic przeciwko porządkowi katalogów i nie potrzebujesz posortowanej listy, to ta metoda Readdir jest wszystkim, czego potrzebujesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 13:46:56