问题描述
所以,我正在尝试做一些应该很简单的事情。我正在使用 std::filesystem::copy
将一个目录复制到另一个目录中,例如:
#include <filesystem>
int main (int argc,char* argv[])
{
const char* dir1 = "C:\\Users\\me\\folder";
const char* dir2 = "C:\\Users\\me\\folder_copy";
std::filesystem::copy(dir1,dir2,std::filesystem::copy_options::update_existing);
return 0;
}
但是,当 folder_copy
已经存在时,上面对我来说崩溃了,并出现以下错误:
Unhandled exception at 0x00007FF932E9A308 in code.exe: Microsoft C++ exception: std::filesystem::filesystem_error at memory location 0x00000012188FF6D0.
有趣的是,标志 std::filesystem::copy_options::overwrite_existing
对我来说很好用。 update_existing
与 std::filesystem::copy
不兼容吗?如果它只适用于 std::filesystem::copy_file
会很奇怪。
无论如何,如果这是设计使然,我该如何复制目录,同时只更新过时的文件?
解决方法
尝试:
int main (int argc,char* argv[])
{
namespace fs = std::filesystem;
const char* dir1 = "C:/Users/me/folder";
const char* dir2 = "C:/Users/me/folder_copy";
try {
fs::copy(dir1,dir2,fs::copy_options::update_existing
//|fs::copy_options::overwrite_existing
|fs::copy_options::recursive);
}
catch (const fs::filesystem_error& e) {
cerr << e.what() << endl;
}
return 0;
}
还要检查在更新时目标文件夹中没有正在使用的文件,并且您有足够的写入权限。