为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
宝慕林4294392 2021-09-13 16:17:23
我正在尝试从 Go 可执行文件(例如“dir1/dir2/dir3”)创建一组嵌套目录。我已经成功地用这一行创建了一个目录:os.Mkdir("." + string(filepath.Separator) + c.Args().First(),0777);但是,我不知道如何在该目录中创建预定的嵌套目录集。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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 的回答中所述的包。


查看完整回答
反对 回复 2021-09-13
?
偶然的你

TA贡献1841条经验 获得超3个赞

这样您就不必使用任何幻数:

os.MkdirAll(newPath, os.ModePerm)

此外,您可以使用:

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

以上在每个平台上自动为您使用正确的分隔符。


查看完整回答
反对 回复 2021-09-13
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

可以使用如下实用方法来解决此问题。


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.")

}


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信