package files import ( "io/fs" "net/url" "path/filepath" "time" ) const FileDateFormat = "2006-01-02 15:04:05 MST" type DirStats struct { Files int64 FilesSize string Directories int64 } type DirEntry struct { Name string Link string Datetime time.Time Size string } func ScanDirectory(path string) (entries []DirEntry, stats DirStats, err error) { var dirEntries []DirEntry = make([]DirEntry, 0) var fileEntries []DirEntry = make([]DirEntry, 0) var totalFilesSize int64 = 0 if err = filepath.Walk(path, func(path string, info fs.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { dirEntries = append(dirEntries, DirEntry{ Name: info.Name(), Link: url.PathEscape("/files"), Datetime: info.ModTime(), Size: "DIR", }) stats.Directories++ } else { _, _, sz := convertFileSize(info.Size()) fileEntries = append(fileEntries, DirEntry{ Name: info.Name(), Link: url.PathEscape("/files"), Datetime: info.ModTime(), Size: sz, }) totalFilesSize += info.Size() stats.Files++ } return nil }); err != nil { return } _, _, sz := convertFileSize(totalFilesSize) stats.FilesSize = sz entries = append(entries, dirEntries...) entries = append(entries, fileEntries...) return }