C / C ++使用自动递归文件夹/目录创建复制文件

在Win32 API中,有一个字面复制文件的CopyFile 。 但是,此API不会创建文件夹。 例如,我想将C:\Data\output.txt复制到D:\Temp\Data\output.txt 。 但是,目标文件夹D:\TempD:\Temp\Data ‘不存在。 在这种情况下,此API失败。

是否有一个方便的API可以自动和递归地在副本上创建目录结构? 当然,我可以做这样的function,但我希望有人已经完成了这个function。

SHFileOperation应该做的伎俩。 来自MSDN:

复制和移动操作可以指定不存在的目标目录。 在这些情况下,系统会尝试创建它们,并且通常会显示一个对话框,询问用户是否要创建新目录。 要禁止显示此对话框并以静默方式创建目录,请在FOF_NOCONFIRMMKDIR中设置FOF_NOCONFIRMMKDIR标志。

您可以使用SHCreateDirectoryEx获得所需的结果。 这是一个例子:

 inline void EnsureDirExists(const std::wstring& fullDirPath) { HWND hwnd = NULL; const SECURITY_ATTRIBUTES *psa = NULL; int retval = SHCreateDirectoryEx(hwnd, fullDirPath.c_str(), psa); if (retval == ERROR_SUCCESS || retval == ERROR_FILE_EXISTS || retval == ERROR_ALREADY_EXISTS) return; //success throw boost::str(boost::wformat(L"Error accessing directory path: %1%; win32 error code: %2%") % fullDirPath % boost::lexical_cast(retval)); //TODO *djg* must do error handling here, this can fail for permissions and that sort of thing }