Junior
Écrivez une fonction FindFilesByExtension qui recherche récursivement des fichiers dans un répertoire et retourne un segment de chemins absolus vers les fichiers ([]string) qui satisfont aux conditions : extension du fichier == targetExtension (sans tenir compte de la casse) taille du fichier > minSizeKB La fonction doit parcourir tous les sous-répertoires imbriqués. Exemple de structure de répertoire : /projects/ ├── doc.pdf (2048 KB) ├── report.docx (512 KB) ├── src/ │ ├── Main.go (2 KB) │ ├── Utils.go (5 KB) └── images/ └── photo.jpg (3072 KB) Exemples de vérifications : files1, _ := FindFilesByExtension("/projects", "pdf", 1000) // files1 == []string{"/projects/doc.pdf"} files2, _ := FindFilesByExtension("/projects", "go", 3) // files2 == []string{"/projects/src/Utils.go"} files3, _ := FindFilesByExtension("/projects", "jpg", 2000) // files3 == []string{"/projects/images/photo.jpg"}
sobes.tech IA
Réponse de l'IA
go package main
import ( "io/fs" "os" "path/filepath" "strings" )
func FindFilesByExtension(rootDir, targetExtension string, minSizeKB int64) ([]string, error) { var result []string
targetExtension = strings.ToLower(targetExtension)
err := filepath.WalkDir(rootDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
ext := strings.ToLower(strings.TrimPrefix(filepath.Ext(d.Name()), "."))
if ext != targetExtension {
return nil
}
info, err := d.Info()
if err != nil {
return err
}
sizeKB := info.Size() / 1024
if sizeKB > minSizeKB {
absPath, err := filepath.Abs(path)
if err != nil {
return err
}
result = append(result, absPath)
}
return nil
})
return result, err
}
// Exemple d'utilisation // files, err := FindFilesByExtension("/projets", "pdf", 1000) // if err != nil { // log.Fatal(err) // } // fmt.Println(files)