Home About
Golang

Golang, listFiles 指定のディレクトリ内のファイルまたはディレクトリを列挙する(改良版)

Golang で listFiles する方法 の改良版。

Java の場合こんなコード:

File file = new File("/path/to/targetdir");
File files[] = file.listFiles();

これに寄せた書き方で Golang で実装してみた。

package main

import (
	"fmt"
	"os"
)

type MyFile struct {
	Name string
	Dir  bool
	File bool
}

func listFiles(pathName string) (*[]MyFile, error) {
	f, err := os.Open(pathName)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	myFiles := []MyFile{}

	fileInfos, err := f.Readdir(0)
	for _, fileInfo := range fileInfos {
		dir := fileInfo.IsDir()
		myFiles = append(myFiles, MyFile{Name: fileInfo.Name(), Dir: dir, File: !dir})
	}

	return &myFiles, nil
}

func main() {
	pathName := "/path/to/targetdir"

	files, err := listFiles(pathName)
	if err == nil {
		for _, file := range *files {
			if file.File {
				fmt.Println(fmt.Sprintf("- file) %s", file.Name))
			} else if file.Dir {
				fmt.Println(fmt.Sprintf("- dir) %s", file.Name))
			}
		}
	}
}