此代码中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);
}
医生说:
copy()
:“复制文件或目录” copy_file()
:“复制文件内容” 由于在此示例中我仅复制一个文件而不是目录,所以这两个调用是否相同?
(我使用的是g ++ 8.2.0。请记住链接libstdc ++ fs,否则您将有对std :: filesystem的未定义引用。)
答案 0 :(得分:4)
使用copy_options
,并且源文件是文件(而不是目录),copy
将调用copy_file
。如果要处理目录,符号链接或硬链接,则不是这种情况。
答案 1 :(得分:4)
是的,除非有错误或您不希望遇到的情况。
如果src
被目录静默替换,则它们的行为会有所不同。如果dst
存在并且是目录,我相信它们的行为会有所不同。某些复制选项可能适用于复制,也不适用于copy_file。
但是,当从一个文件复制到另一个文件或不存在该文件的名称时,copy
会调用copy_file
。
请注意,有人可以删除foo.txt
并将其替换为您上次检查(例如上一行)和调用copy
或{{1}之间的目录}。在实现健壮的文件系统交互时,您不应假定文件系统处于特定状态,并确保以防御性方式编写代码。为此,如果要复制一个文件,请使用copy_file
。 (并始终检查错误。)