Comment créer des répertoires nesteds en utilisant Mkdir dans Golang?

J’essaie de créer un ensemble de répertoires nesteds à partir d’un exécutable Go tel que “dir1 / dir2 / dir3”. J’ai réussi à créer un répertoire unique avec cette ligne:

os.Mkdir("." + ssortingng(filepath.Separator) + c.Args().First(),0777); 

Mais je ne sais pas comment aborder la création d’un ensemble de répertoires nesteds prédéterminé à l’intérieur de ce répertoire et mon Google Fu n’est pas aussi puissant que je le pensais.

Merci d’avance!

os.Mkdir est utilisé pour créer un répertoire unique. Pour créer un chemin de dossier, essayez plutôt d’utiliser:

 os.MkdirAll(folderPath, os.ModePerm); 

Aller documentation

erreur func MkdirAll (chaîne de chemin, mode de fichier perm)

MkdirAll crée un répertoire nommé path, avec tous les parents nécessaires, et renvoie nil, ou renvoie une erreur. Les bits de permission perm sont utilisés pour tous les répertoires créés par MkdirAll. Si path est déjà un répertoire, MkdirAll ne fait rien et retourne nil.

Modifier:

Mis à jour pour utiliser correctement os.ModePerm place.
Pour la concaténation des chemins de fichiers, utilisez le path/filepath comme décrit dans la réponse de @Chris.

De cette façon, vous n’avez pas à utiliser de chiffres magiques:

 os.MkdirAll(newPath, os.ModePerm) 

De plus, plutôt que d’utiliser + pour créer des chemins, vous pouvez utiliser:

 import "path/filepath" path := filepath.Join(someRootPath, someSubPath) 

Ce qui précède utilise automatiquement les séparateurs corrects sur chaque plate-forme.

Si le problème est de créer tous les répertoires parents nécessaires, vous pouvez envisager d’utiliser os.MkDirAll()

MkdirAll crée un répertoire nommé path, avec tous les parents nécessaires, et renvoie nil, ou renvoie une erreur.

Le path_test.go illustre bien son utilisation:

 func TestMkdirAll(t *testing.T) { tmpDir := TempDir() path := tmpDir + "/_TestMkdirAll_/dir/./dir2" err := MkdirAll(path, 0777) if err != nil { t.Fatalf("MkdirAll %q: %s", path, err) } defer RemoveAll(tmpDir + "/_TestMkdirAll_") ... } 

(Assurez-vous de spécifier une valeur d’autorisation sensible, comme indiqué dans cette réponse )