Golang os.使用嵌套目录创建路径
正如GoDocs中提到的,Golang os.使用嵌套目录创建路径,go,operating-system,Go,Operating System,正如GoDocs中提到的,os.Create()在特定路径中创建一个文件 os.Create(“font/foo/font.eot”) 但是当font或foo不存在时,它返回panic:open fonts/foo/font.eot:系统找不到指定的路径。 因此,我使用os.MkdirAll()创建嵌套目录。但是这个函数还有很多其他问题 path:=“font/foo/font.eot” //这一行创建一个名为(font.eot)的目录! os.MkdirAll(路径,os.ModePerm)
os.Create()
在特定路径中创建一个文件
os.Create(“font/foo/font.eot”)
但是当font
或foo
不存在时,它返回panic:open fonts/foo/font.eot:系统找不到指定的路径。
因此,我使用
os.MkdirAll()
创建嵌套目录。但是这个函数还有很多其他问题
path:=“font/foo/font.eot”
//这一行创建一个名为(font.eot)的目录!
os.MkdirAll(路径,os.ModePerm)
有没有更好的方法在嵌套目录中创建文件?标准方法如下:
func create(p string) (*os.File, error) {
if err := os.MkdirAll(filepath.Dir(p), 0770); err != nil {
return nil, err
}
return os.Create(p)
}
请注意:
- Create不会像问题中所说的那样惊慌失措
- 从文件路径的目录部分而不是完整路径创建目录
mkdir
和open
系统调用。你指的是什么“许多其他问题”?它是os.MkdirAll(“font/foo”,0770);os.Create(“fonts/foo/font.eot”)
非常简单而且非常明显。@沃尔克:大多数程序可能应该在这里使用模式0777
,而不是0770
。文件创建通常应使用模式0666
。这些允许用户的umask根据需要删除组和/或其他写入权限,或者根据需要删除更多权限(导致目录的模式为0750或0700)。(我在其他地方看到过使用0770的建议,但不确定它来自何处。)@torek文件路径和模式都不是固定的,需要根据您的特定用例采用。没有一个正确的值。