请参阅下面的代码,以及下面的错误。
std::string source = "C:\Users\cambarchian\Documents\tested";
std::string destination = "C:\Users\cambarchian\Documents\tester";
std::filesystem::path sourcepath = source;
std::filesystem::path destpath = destination;
std::filesystem::copy_options::update_existing;
std::filesystem::copy(sourcepath, destpath);
terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error'
what(): filesystem error: cannot copy: File exists [C:UserscambarchianDocumentstested] [C:UserscambarchianDocumentstester]
尝试使用文件系统::copy,同时尝试不同的路径。没有任何运气。我不能在这里写太多,因为上面列出了这个问题,可能是一个简单的格式问题。话虽如此,它使用visual studio 2022在我的家用电脑上运行,但使用带有gcc 11.2的VS Code会给我带来这个问题。
使用:文件系统::复制文件(oldPath、newPath、文件系统:复制选项::overwrite_existing(
std::filesystem::copy
的过载记录在案。你正在使用第一个过载,但想要第二个:
void copy(from, to)
,相当于使用copy_options::none
的[过载2,如下]void copy(from, to, options)
在调用copy之前编写语句std::filesystem::copy_options::update_existing;
根本没有任何效果,而将选项传递给正确的重载(如(
std::filesystem::copy(sourcepath, destpath,
std::filesystem::copy_options::update_existing);
应该做你想做的事。
。。。它在我的家用电脑上使用visualstudio2022。。。
在这种情况下,您没有说明目标文件是否存在,这是您应该检查的第一件事情。
我把copy_options放在了复制函数中,但它不起作用,所以我开始移动它,我可能应该提到这一点。
随机排列代码不是为其他人生成干净示例的好方法。
在极少数情况下,破解确实修复了它,我强烈建议停下来找出为什么。当你已经破解了一些东西,但它仍然不起作用时,一定要留下评论来提醒自己你尝试了什么,但代码本身应该仍然处于良好状态。
当我写
std::filesystem::copy(sourcepath, destpath, std::filesystem::copy_options::recursive)
时仍然不起作用
好吧,那是另一种选择,不是吗?你是不是也在随机排列你选择的copy_options
?
尝试递归和update_existing会产生相同的问题。
文档显示
如果
options
中的任何copy_options选项组中存在多个选项(甚至在copy_file
组中(,则行为未定义。
所以无论如何都不应该同时设置。递归复制单个文件没有好处,但可能有更新或覆盖文件的好处。如果目标已存在。根据你的错误,确实如此。
由于您确实有一个错误,明确地说";文件存在";,你当然应该看看">当文件已经存在时控制CCD_ 10的选项";这是表格的一部分。