github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/util/io.go (about) 1 package util 2 3 import ( 4 "io" 5 "os" 6 "path/filepath" 7 ) 8 9 // Exists reports whether the named file or directory exists. 10 func Exists(name string) bool { 11 if _, err := os.Stat(name); err != nil { 12 if os.IsNotExist(err) { 13 return false 14 } 15 } 16 return true 17 } 18 19 // CreatNestedFile 给定path创建文件,如果目录不存在就递归创建 20 func CreatNestedFile(path string) (*os.File, error) { 21 basePath := filepath.Dir(path) 22 if !Exists(basePath) { 23 err := os.MkdirAll(basePath, 0700) 24 if err != nil { 25 Log().Warning("Failed to create directory: %s", err) 26 return nil, err 27 } 28 } 29 30 return os.Create(path) 31 } 32 33 // IsEmpty 返回给定目录是否为空目录 34 func IsEmpty(name string) (bool, error) { 35 f, err := os.Open(name) 36 if err != nil { 37 return false, err 38 } 39 defer f.Close() 40 41 _, err = f.Readdirnames(1) // Or f.Readdir(1) 42 if err == io.EOF { 43 return true, nil 44 } 45 return false, err // Either not empty or error, suits both cases 46 }