std::filesystem::copy() 和 std::filesystem::copy_file() 有什么区别?

Sté*_*ane 4 c++ g++ c++17 std-filesystem

这段代码中std::filesystem::copy()和之间有什么区别std::filesystem::copy_file()

#include <filesystem>

void testing()
{
    const std::filesystem::path src = "foo.txt";
    const std::filesystem::path dst = "bar.txt";

    std::filesystem::copy(     src, dst, std::filesystem::copy_options::overwrite_existing);
    std::filesystem::copy_file(src, dst, std::filesystem::copy_options::overwrite_existing);
}
Run Code Online (Sandbox Code Playgroud)

文档说:

  • copy():“复制文件或目录”
  • copy_file():“复制文件内容”

由于我在此示例中复制的是单个文件而不是目录,因此这两个调用是否相同?

(我使用的是 g++ 8.2.0。记住链接 libstdc++fs 否则你将有对 std::filesystem 的未定义引用。)

Yak*_*ont 6

是的,除非出现错误或您不期望的情况。

如果src被一个目录静默替换,它们的行为会有所不同。如果dst存在并且是一个目录,我相信它们的行为会有所不同。一些复制选项可能适用于 copy 而不是 copy_file 。

但是当从一个文件复制到另一个文件或复制到一个文件不存在的名称时,copy调用copy_file.

但是请注意,有人可以删除foo.txt它并将其替换为您上次检查(例如上一行)和调用copyor 之间的目录copy_file。在实现健壮的文件系统交互时,您不应假设文件系统处于特定状态,并确保您的代码是防御性编写的。为此,如果您打算复制一个文件,请使用copy_file. (并始终检查错误。)