应先提取两目录同名文件路径交集再哈希比对用std::set_intersection处理标准化相对路径统一斜杠格式按平台决定大小写敏感性优先用libsodium或OpenSSL的SHA-256避免MD5和自实现小文件可用std::hash预筛但须SHA-256最终校验。用 std::filesystem 遍历文件并跳过非同名项直接递归比对两个文件夹所有文件是低效且危险的——你只关心「同名文件」不是「所有文件」。先提取交集路径再逐个处理能避免大量无效 I/O 和哈希计算。关键点用 std::set_intersection 对两个 std::vector:string/:string只存相对路径如 src/main.cpp求交集路径标准化必须统一用正斜杠或反斜杠否则 a/b 和 a 会被判不同名。别用 std::filesystem::recursive_directory_iterator 边走边比——无法预知对方是否存在同名项相对路径要基于共同根目录裁剪比如 dirA/x.txt 和 dirB/x.txt提取出 x.txt 才能对齐注意大小写Windows 下 File.TXT 和 file.txt 是同一文件但 Linux 下不是按目标平台决定是否忽略大小写比较选 std::sha256_hash 还是手撸 std::md5C23 才正式加入 std::sha256_hash此前标准库无哈希函数别自己实现 SHA-256也别用已淘汰的 MD5——碰撞风险高且某些编译器如 MSVC 17.8已弃用 openssl/openssl。务实方案用 openssl 的 EVP_DigestInit_ex EVP_DigestUpdate或更轻量的 libsodiumcrypto_hash_sha256。若不能引入第三方可用 C17 的 std::hash 做快速预筛仅限小文件但必须跟 SHA-256 最终校验配对使用。立即学习“C免费学习笔记深入”小文件std::span 传给哈希函数大文件必须流式计算每次 read() 4KB~64KB避免 std::bad_alloc别把哈希结果存成 std::string 直接拼接——二进制哈希值含 要用十六进制编码std::format({:02x}, b)再比较遇到 Permission denied 或 No such file or directory 怎么跳过遍历时权限不足或路径失效非常常见硬崩掉整个比对流程毫无必要。重点不是“捕获所有异常”而是区分错误类型有选择地跳过。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能