std::filesystem::copy_file报Invalid argument错误的解决方法
修复std::filesystem::copy_file的Invalid argument错误
问题根源
std::filesystem::copy_file要求第二个参数必须是具体的文件路径,你传入的root_dir是目录路径,不符合函数参数规则,这就是触发"Invalid argument"错误的直接原因。
修复代码
修改目标路径构造逻辑,将源文件名拼接到目标目录后,生成完整的目标文件路径:
int main(){ std::filesystem::path root_dir = "/home/xyz/study/misis2023f-22-3-kovaleva-m-a/prj.cw/test_dir"; std::filesystem::path from_path = "/home/xyz/study/misis2023f-22-3-kovaleva-m-a/prj.cw/test_dir/misis2023_kovaleva_m_a/make.cpp"; std::cout << std::filesystem::exists(from_path) << '\n'; // 拼接目录与源文件名,生成合法的目标文件路径 std::filesystem::path to_path = root_dir / from_path.filename(); std::filesystem::copy_file(from_path, to_path, std::filesystem::copy_options::update_existing); }
关键说明
from_path.filename()会提取源路径中的纯文件名(此处为make.cpp),使用/运算符是std::filesystem::path推荐的跨平台路径拼接方式,能自动适配不同系统的路径分隔符。- 若需自定义目标文件名,直接替换
from_path.filename()即可,例如root_dir / "renamed_make.cpp"。 - 如果你的需求是复制整个目录(包含子目录和文件),请使用
std::filesystem::copy函数,并搭配copy_options::recursive选项。
内容的提问来源于stack exchange,提问作者su-mrak
相关产品推荐
相关产品推荐

