1.6 KiB
1.6 KiB
ProjectManager::MoveItem
bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath);
当前行为
MoveItem(...) 当前只支持“把一个项目内条目移动到另一个项目内目录”。
它会校验:
- 源路径和目标目录路径都非空
m_rootFolder已存在- 源路径存在
- 目标路径存在且是目录
- 源和目标都位于项目根目录之下
- 源路径不是根目录本身
- 若源是目录,目标不能位于它自己的子树里
- 目标最终路径不能与源路径相同
- 目标最终路径不能已存在同名条目
成功路径
校验通过后,当前会:
- 把目标路径拼成
destFolder / source.filename() - 对资源本体执行
fs::rename(sourcePath, destPath) - 若存在同名
.metasidecar,则同步移动.meta - 调用 RefreshCurrentFolder
同步移动 sidecar 是当前资源移动行为里很重要的一部分,因为它让导入元数据和资源路径保持一致,不会把 .meta 留在旧目录。
返回值语义
- 移动成功并刷新完成时返回
true - 任一校验失败或文件系统异常时返回
false
当前限制
- 当前不做自动重命名避让;目标已有同名条目会直接失败
- 当前不会主动保留被移动条目的选择状态;若路径变化导致旧
m_selectedItemPath失效,刷新后选择可能被清掉