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  }