如何在 Golang 中使用 Mkdir 创建嵌套目录?

我正在尝试从 Go 可执行文件(例如“dir1/dir2/dir3”)创建一组嵌套目录。我已经成功地用这一行创建了一个目录:

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

但是,我不知道如何在该目录中创建预定的嵌套目录集。


宝慕林4294392
浏览 185回答 3
3回答

幕布斯7119047

os.Mkdir用于创建单个目录。要创建文件夹路径,请尝试使用:os.MkdirAll(folderPath, os.ModePerm)Go 文档func MkdirAll(path string, perm FileMode) 错误MkdirAll 创建一个名为 path 的目录以及任何必要的父目录,并返回 nil,否则返回错误。权限位 perm 用于 MkdirAll 创建的所有目录。如果 path 已经是一个目录,则 MkdirAll 什么都不做并返回 nil。编辑:更新为正确使用os.ModePerm。对于文件路径的串联,请使用path/filepath@Chris 的回答中所述的包。

偶然的你

这样您就不必使用任何幻数:os.MkdirAll(newPath, os.ModePerm)此外,您可以使用:import "path/filepath" path := filepath.Join(someRootPath, someSubPath)以上在每个平台上自动为您使用正确的分隔符。

拉莫斯之舞

可以使用如下实用方法来解决此问题。import (  "os"  "path/filepath"  "log")func ensureDir(fileName string) {  dirName := filepath.Dir(fileName)  if _, serr := os.Stat(dirName); serr != nil {    merr := os.MkdirAll(dirName, os.ModePerm)    if merr != nil {        panic(merr)    }  }}func main() {  _, cerr := os.Create("a/b/c/d.txt")  if cerr != nil {    log.Fatal("error creating a/b/c", cerr)  }  log.Println("created file in a sub-directory.")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go