package filesystem import ( "context" model "github.com/HFO4/cloudreve/models" "path" ) /* ================= 路径/目录相关 ================= */ // CreateDirectory 在`base`路径下创建名为`dir`的目录 func (fs *FileSystem) CreateDirectory(ctx context.Context, fullPath string) error { // 获取要创建目录的父路径和目录名 fullPath = path.Clean(fullPath) base := path.Dir(fullPath) dir := path.Base(fullPath) // 检查目录名是否合法 if !fs.ValidateLegalName(ctx, dir) { return ErrIllegalObjectName } // 父目录是否存在 isExist, parent := fs.IsPathExist(base) if !isExist { return ErrPathNotExist } // 是否有同名文件 if fs.IsFileExist(path.Join(base, dir)) { return ErrFileExisted } // 创建目录 newFolder := model.Folder{ Name: dir, ParentID: parent.ID, Position: base, OwnerID: fs.User.ID, PositionAbsolute: fullPath, } _, err := newFolder.Create() return err } // IsPathExist 返回给定目录是否存在 // 如果存在就返回目录 func (fs *FileSystem) IsPathExist(path string) (bool, *model.Folder) { folder, err := model.GetFolderByPath(path, fs.User.ID) return err == nil, &folder } // IsFileExist 返回给定路径的文件是否存在 func (fs *FileSystem) IsFileExist(fullPath string) bool { basePath := path.Dir(fullPath) fileName := path.Base(fullPath) _, err := model.GetFileByPathAndName(basePath, fileName, fs.User.ID) return err == nil }