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

如何检查路径上的目录是否为空?

如何检查路径上的目录是否为空?

Go
哔哔one 2021-10-11 13:53:40
如果文件夹为空,如何检查 Go?我可以检查:files, err := ioutil.ReadDir(*folderName)if err != nil {    return nil, err}// here check len of files 但在我看来应该有更优雅的解决方案。
查看完整描述

1 回答

?
蝴蝶刀刀

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

目录是否为空不会作为名称、创建时间或大小(如果是文件)等属性存储在文件系统级别。


话虽如此,您不能仅从os.FileInfo. 最简单的方法是查询目录的子项(内容)。


ioutil.ReadDir()这是一个非常糟糕的选择,因为它首先读取指定目录的所有内容,然后按名称对它们进行排序,然后返回切片。最快的方法是 Dave C 提到的:使用File.Readdir()or (最好)查询目录的子级File.Readdirnames()。


二者File.Readdir()并File.Readdirnames()采取其用于限制返回值的数量的参数。仅查询 1 个孩子就足够了。由于Readdirnames()仅返回名称,因此速度更快,因为不需要进一步调用来获取(和构造)FileInfo结构。


请注意,如果目录为空,io.EOF则作为错误返回(而不是空或nil切片),因此我们甚至不需要返回的名称切片。


最终代码可能如下所示:


func IsEmpty(name string) (bool, error) {

    f, err := os.Open(name)

    if err != nil {

        return false, err

    }

    defer f.Close()


    _, err = f.Readdirnames(1) // Or f.Readdir(1)

    if err == io.EOF {

        return true, nil

    }

    return false, err // Either not empty or error, suits both cases

}


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

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