技能|文件安全操作SOP
适用场景
本机系统回收站不可用(ctypes SHFileOperationW 实测为永久删除、PowerShell Add-Type 被安全策略拦),需要对文件做可逆移动、版本管理与安全删除时。
操作步骤
- 语义回收:用 shutil.move 把文件移到
程序源代码\backup\.trash\<相对总根路径>,随时可还原;统一回收站,不走系统回收站。 - 版本单留(按用户规则):源文件 / 程序产物在原目录只允许保留最新版。
- 最近版本存档:把上一个旧版存入
.workbuddy\版本存档\<原相对路径>,用于恢复。 - 其它版本直接删除:除「最新版 + 版本存档的最近版」外,历史版本一律删除(不滞留回收站)。
- 删除目录前先 os.listdir 校验为空,再 os.rmdir,避免误删有内容目录。
注意边界
- 禁止 os.remove / shutil.rmtree 直接硬删业务文件;一切移动走语义回收。
- 删除空目录无数据风险,但须先校验为空。
- 跨目录移动前检查目标重名,冲突则改名避免覆盖。
反例避雷
- ❌ 用 ctypes SHFileOperationW + FOF_ALLOWUNDO 当「回收站」:实测 rc=0 掩饰、回收站始终为空,是永久删除,已废止。
- ❌ 版本双份留 .trash 又留原目录:违反「原目录只留最新版」。