我需要写入嵌套目录中可能存在或不存在的文件。
首先,我检查了文件夹是否存在os.Stat
,如果不存在则执行os.MkdirAll
,然后打开并写入文件。
我尝试删除os.Stat并只执行os.MkdirAll
,它似乎有效 - 意味着os.MkdirAll
是幂等的。
我的问题是,进行os.Stat
检查有什么好处?这是一个比os.MkdirAll
轻得多的操作吗?
答案 0 :(得分:3)
MkdirAll
做的第一件事就是调用os.Stat
来检查路径是否存在并且是一个目录。
func MkdirAll(path string, perm FileMode) error {
// Fast path: if we can tell whether path is a directory or file, stop with success or error.
dir, err := Stat(path)
if err == nil {
if dir.IsDir() {
return nil
}
return &PathError{"mkdir", path, syscall.ENOTDIR}
}
...
来自文档:
如果path已经是目录,则MkdirAll不执行任何操作并返回nil。
所以不,你不需要拨打os.Stat
。