使用os.Stat和os.MkdirAll进行检查

时间:2016-02-26 21:21:41

标签: go

我需要写入嵌套目录中可能存在或不存在的文件。

首先,我检查了文件夹是否存在os.Stat,如果不存在则执行os.MkdirAll,然后打开并写入文件。

我尝试删除os.Stat并只执行os.MkdirAll,它似乎有效 - 意味着os.MkdirAll是幂等的。

我的问题是,进行os.Stat检查有什么好处?这是一个比os.MkdirAll轻得多的操作吗?

1 个答案:

答案 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