std::filesystem::copy将文件复制到另一个预先存在的目录时出错



请参阅下面的代码,以及下面的错误。

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的过载记录在案。你正在使用第一个过载,但想要第二个:

  1. void copy(from, to),相当于使用copy_options::none的[过载2,如下]
  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的选项";这是表格的一部分。

Visual Studio 2022修复了问题

相关内容

  • 没有找到相关文章

最新更新