YAML配置备份必须用std::filesystem::copy并指定overwrite_existing选项配合exists预检和try/catch捕获filesystem_error命名需含时间戳与原扩展名路径用std::filesystem::path逻辑须独立于YAML加载。YAML配置文件备份必须用std::filesystem::copy别手写std::ifstream/std::ofstream手动流拷贝容易丢字节、截断或破坏二进制安全——YAML虽是文本但可能含BOM、UTF-8多字节序列、换行符不一致 vs std::ifstream::read默认按char逐字节读没指定std::ios::binary时会触发换行转换导致备份后文件md5sum不一致。C17起std::filesystem::copy是唯一可靠方案。必须加std::filesystem::copy_options::overwrite_existing否则目标存在时抛std::filesystem::filesystem_error不要用std::filesystem::copy_file它不支持目录且对符号链接行为不明确copy更通用路径传std::filesystem::path对象别传const char*——Windows下中文路径会乱码备份命名要带时间戳原扩展名不能硬编码.bak只加.bak后缀会导致多次备份覆盖同一文件无法回溯。YAML配置常用于服务启动前加载若备份失败又没留痕重启后可能加载到损坏配置。用std::chrono::system_clock::now()生成秒级时间戳避免毫秒级在文件系统精度不足引发冲突保留原始扩展名config.yaml → config.yaml.20240521_142305.bak方便IDE识别语法高亮时间格式用%Y%m%d_%H%M%S不用:Windows禁止和空格shell解析麻烦std::filesystem::exists检查必须放在copy之前且要捕获异常直接调copy再靠异常判断源文件是否存在会掩盖其他错误如权限不足、磁盘满。YAML配置路径常来自环境变量或命令行参数未必真实存在。先用std::filesystem::exists(src)确认源存在返回false就跳过备份——不是所有场景都要求强备份即使exists返回truecopy仍可能失败如源被其他进程锁住所以copy必须包在try/catch里捕获std::filesystem::filesystem_error不要用std::exception泛捕——前者能拿到具体.code().value()如EACCES自动备份逻辑必须与YAML加载解耦别塞进YAML::LoadFile调用里把备份逻辑写在读取配置的同一函数里会导致1每次读配置都备份冗余IO2加载失败时备份了损坏文件3单元测试难mock。实际只需在服务初始化早期、确认配置路径合法后执行一次。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能