package filesystem import ( "path" model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/util" ) /* ================= 路径/目录相关 ================= */ // IsPathExist 返回给定目录是否存在 // 如果存在就返回目录 func (fs *FileSystem) IsPathExist(path string) (bool, *model.Folder) { pathList := util.SplitPath(path) if len(pathList) == 0 { return false, nil } // 递归步入目录 // TODO:测试新增 var currentFolder *model.Folder // 如果已设定跟目录对象,则从给定目录向下遍历 if fs.Root != nil { currentFolder = fs.Root } for _, folderName := range pathList { var err error // 根目录 if folderName == "/" { if currentFolder != nil { continue } currentFolder, err = fs.User.Root() if err != nil { return false, nil } } else { currentFolder, err = currentFolder.GetChild(folderName) if err != nil { return false, nil } } } return true, currentFolder } // IsFileExist 返回给定路径的文件是否存在 func (fs *FileSystem) IsFileExist(fullPath string) (bool, *model.File) { basePath := path.Dir(fullPath) fileName := path.Base(fullPath) // 获得父目录 exist, parent := fs.IsPathExist(basePath) if !exist { return false, nil } file, err := parent.GetChildFile(fileName) return err == nil, file } // IsChildFileExist 确定folder目录下是否有名为name的文件 func (fs *FileSystem) IsChildFileExist(folder *model.Folder, name string) (bool, *model.File) { file, err := folder.GetChildFile(name) return err == nil, file }