From 1fe9bae94290d0070eac485713bee3122e6c3c52 Mon Sep 17 00:00:00 2001 From: amorozov Date: Sat, 29 Jun 2024 23:48:26 +0300 Subject: [PATCH] feature: added sub file finders --- pkg/io/files/subfile_finder.go | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 pkg/io/files/subfile_finder.go diff --git a/pkg/io/files/subfile_finder.go b/pkg/io/files/subfile_finder.go new file mode 100644 index 0000000..b957f1f --- /dev/null +++ b/pkg/io/files/subfile_finder.go @@ -0,0 +1,64 @@ +package files + +import ( + "fmt" + "io/fs" + "os" + "path/filepath" + + "git.tswf.io/incredible-go/incredible-go-core/pkg/collections/array_list" +) + +type FileFilter func(fileInfo os.FileInfo, fileName string) bool + +func ListFiles(dirPath string) (*array_list.ArrayList[os.FileInfo], error) { + dirInfo, err := os.Stat(dirPath) + + if err != nil { + return nil, err + } + + if !dirInfo.IsDir() { + return nil, fmt.Errorf("'%s' is not directory", dirPath) + } + + dirEntries, err := os.ReadDir(dirPath) + + if err != nil { + return nil, err + } + + result := array_list.NewArrayList[os.FileInfo]() + + if len(dirEntries) > 0 { + for _, dirEntry := range dirEntries { + dirEntryFileInfo, err := dirEntry.Info() + + if err != nil { + return nil, err + } + + result.Add(dirEntryFileInfo) + } + } + + return result, nil +} + +func FindSubfilesByFilter(rootPath string, filter FileFilter) (*array_list.ArrayList[os.FileInfo], error) { + result := array_list.NewArrayList[os.FileInfo]() + + err := filepath.Walk(rootPath, func(path string, info fs.FileInfo, err error) error { + if err != nil && filter(info, path) { + result.Add(info) + } + + return nil + }) + + if err != nil { + return nil, err + } + + return result, nil +}