C / C ++使用自动递归文件夹/目录创建复制文件
在Win32 API中,有一个字面复制文件的CopyFile 。 但是,此API不会创建文件夹。 例如,我想将C:\Data\output.txt
复制到D:\Temp\Data\output.txt
。 但是,目标文件夹D:\Temp
和D:\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 }