github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/path.go (about)

     1  package filesystem
     2  
     3  import (
     4  	"path"
     5  
     6  	model "github.com/cloudreve/Cloudreve/v3/models"
     7  	"github.com/cloudreve/Cloudreve/v3/pkg/util"
     8  )
     9  
    10  /* =================
    11  	 路径/目录相关
    12     =================
    13  */
    14  
    15  // IsPathExist 返回给定目录是否存在
    16  // 如果存在就返回目录
    17  func (fs *FileSystem) IsPathExist(path string) (bool, *model.Folder) {
    18  	pathList := util.SplitPath(path)
    19  	if len(pathList) == 0 {
    20  		return false, nil
    21  	}
    22  
    23  	// 递归步入目录
    24  	// TODO:测试新增
    25  	var currentFolder *model.Folder
    26  
    27  	// 如果已设定跟目录对象,则从给定目录向下遍历
    28  	if fs.Root != nil {
    29  		currentFolder = fs.Root
    30  	}
    31  
    32  	for _, folderName := range pathList {
    33  		var err error
    34  
    35  		// 根目录
    36  		if folderName == "/" {
    37  			if currentFolder != nil {
    38  				continue
    39  			}
    40  			currentFolder, err = fs.User.Root()
    41  			if err != nil {
    42  				return false, nil
    43  			}
    44  		} else {
    45  			currentFolder, err = currentFolder.GetChild(folderName)
    46  			if err != nil {
    47  				return false, nil
    48  			}
    49  		}
    50  	}
    51  
    52  	return true, currentFolder
    53  }
    54  
    55  // IsFileExist 返回给定路径的文件是否存在
    56  func (fs *FileSystem) IsFileExist(fullPath string) (bool, *model.File) {
    57  	basePath := path.Dir(fullPath)
    58  	fileName := path.Base(fullPath)
    59  
    60  	// 获得父目录
    61  	exist, parent := fs.IsPathExist(basePath)
    62  	if !exist {
    63  		return false, nil
    64  	}
    65  
    66  	file, err := parent.GetChildFile(fileName)
    67  
    68  	return err == nil, file
    69  }
    70  
    71  // IsChildFileExist 确定folder目录下是否有名为name的文件
    72  func (fs *FileSystem) IsChildFileExist(folder *model.Folder, name string) (bool, *model.File) {
    73  	file, err := folder.GetChildFile(name)
    74  	return err == nil, file
    75  }