方式一:需支持C++17
#include <filesystem>
std::filesystem::copy(from,to,tag);
方式二:SHFileOperation
bool copyFile(const TCHAR* old_file, const TCHAR* new_file)
{
SHFILEOPSTRUCT FileOp = { 0 };
FileOp.fFlags = FOF_MULTIDESTFILES|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NO_UI;
FileOp.pFrom = old_file;
FileOp.pTo = new_file;
FileOp.wFunc = FO_COPY;
return SHFileOperation(&FileOp) == 0;
}
方式三:xcopy
bool copyFile(const TCHAR* files_from, const TCHAR* files_to,int wait = 30000)
{
STARTUPINFO sa = { 0 };
sa.cb = sizeof(sa);
sa.dwFlags = STARTF_USESHOWWINDOW;
sa.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi = { 0 };
//std::string strcmd = "xcopy \"d://test//t\" \"d://test//cx\" /C /D /Y /E";
char szCmd[2048] = "";
_snprintf_s<2048>(szCmd,2048, "xcopy \"%s\" \"%s\" /C /D /Y /E", files_from, files_to);
if (CreateProcess(nullptr, szCmd, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &sa, &pi))
{
if (::WaitForSingleObject(pi.hProcess, wait) == WAIT_TIMEOUT)
{
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return true;
}
return false;
}
每种方式都有自己的方式行为,具体可以参考每种方式的msdn文档。