将目录及其内容移动到另一个目录



我正在尝试熟悉c++ 17的文件系统库,我正在尝试实现函数

bool MoveFolder(std::string_view oldRelativePath, std::string_view newRelativePath)

将把位于oldRelativePath的文件夹移到newRelativePath下。我已经摆弄了一个小时了,但没有运气。如何用std::filesystem实现这个功能?对于任何错误,我希望返回false。

您当然使用std::filesystem::rename。

将由old_p标识的文件系统对象移动或重命名为new_p,就像通过POSIX重命名一样。

好的,我发现了我之前使用std::filesystem::rename的方法的问题。重命名,顾名思义,重命名。它不动。我试着这样使用它:

fs::path p = fs::current_path() / "sandbox";
fs::create_directories(p / "from");
std::ofstream(p / "from/file1.txt").put('a');
fs::create_directory(p / "to");
fs::rename(p / "from", p / "to"); // NOT-OK
fs::remove_all(p);

这将导致from被重命名为to,它实际上不会将from移动到to下,这正是我想要做的。这里有一个简单的方法:

fs::path p = fs::current_path() / "sandbox";
fs::create_directories(p / "from");
std::ofstream(p / "from/file1.txt").put('a');
fs::create_directory(p / "to");
fs::path ppp(p/"from");
fs::rename(p / "from", p / "to" / ppp.filename()); // OK
fs::remove_all(p);

这是我一直拼命想实现的功能…

bool MoveFolder(std::string_view oldRelativePath, std::string_view newRelativePath) {
fs::path old(oldRelativePath);
fs::path neww(newRelativePath);
std::error_code err;
fs::rename(old, old / neww.filename(), err);
return !static_cast<bool>(err);
}

相关内容

  • 没有找到相关文章

最新更新