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 }